PluginProbe
Booking Calendar / 11.3
Booking Calendar v11.3
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
booking / includes / page-settings-themes / _out / settings_themes_page.js

settings_themes_page.js in Booking Calendar 11.3, at includes/page-settings-themes/_out/settings_themes_page.js

385 lines 64.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2
3 /**
4 * Appearance / Theme settings page UI.
5 */
6 (function ($, w) {
7 'use strict';
8
9 var cfg = w.wpbc_settings_themes_page || {};
10 var preview_ajax = null;
11 var preview_timer = 0;
12 var preview_notice_timer = 0;
13 var preview_notice_message_timer = 0;
14 function trim_text(value) {
15 return String(value || '').trim();
16 }
17 function make_asset_url(path) {
18 path = String(path || '');
19 if (/^https?:\/\//i.test(path) || /^\/\//.test(path)) {
20 return path;
21 }
22 return String(cfg.plugin_url || '').replace(/\/$/, '') + path;
23 }
24 function show_message(message, type, delay) {
25 if (typeof w.wpbc_admin_show_message === 'function') {
26 w.wpbc_admin_show_message(message, type || 'info', delay || 4000, false);
27 }
28 }
29 function pulse_element($element, duration) {
30 if (!$element || !$element.length) {
31 return;
32 }
33 $element.removeClass('wpbc_theme_attention_pulse').each(function () {
34 void this.offsetWidth;
35 }).addClass('wpbc_theme_attention_pulse');
36 setTimeout(function () {
37 $element.removeClass('wpbc_theme_attention_pulse');
38 }, duration || 2100);
39 }
40 function pulse_latest_warning_notice() {
41 clearTimeout(preview_notice_message_timer);
42 preview_notice_message_timer = setTimeout(function () {
43 pulse_element($('#ajax_working .wpbc_inner_message.notice-warning').last());
44 }, 50);
45 }
46 function show_highlighted_notice(message, type, delay, $control) {
47 if ($control && $control.length) {
48 pulse_element($control);
49 }
50 show_message(message, type || 'warning', delay || 9000);
51 pulse_latest_warning_notice();
52 }
53 function switch_panel($tab) {
54 var panel_id = $tab.attr('aria-controls');
55 var $tabs = $tab.closest('.wpbc_theme_rightbar_tabs').find('[role="tab"]');
56 var $panels = $('.wpbc_theme_rightbar_panels [role="tabpanel"]');
57 $tabs.attr('aria-selected', 'false');
58 $tab.attr('aria-selected', 'true');
59 $panels.attr('hidden', 'hidden').attr('aria-hidden', 'true');
60 $('#' + panel_id).removeAttr('hidden').attr('aria-hidden', 'false');
61 }
62 function toggle_group($button) {
63 var $group = $button.closest('.wpbc_ui__collapsible_group');
64 var $fields = $group.find('> .group__fields');
65 var is_open = $group.hasClass('is-open');
66 $group.toggleClass('is-open', !is_open);
67 $button.attr('aria-expanded', is_open ? 'false' : 'true');
68 $fields.prop('hidden', is_open).attr('aria-hidden', is_open ? 'true' : 'false');
69 }
70 function get_form() {
71 return $('[data-wpbc-theme-settings-form="1"]').first();
72 }
73 function collect_payload() {
74 var $form = get_form();
75 var data = {};
76 $.each($form.serializeArray(), function (index, item) {
77 data[item.name] = item.value;
78 });
79 data.booking_timeslot_picker = $form.find('[name="booking_timeslot_picker"]').prop('checked') ? 'On' : 'Off';
80 data.resource_id = $('#wpbc_theme_resource_id').val() || '';
81 data.months_count = $('#wpbc_theme_months_count').val() || '';
82 data.preview_mode = $('#wpbc_theme_preview_mode').val() || 'calendar';
83 data.custom_booking_form = $('#wpbc_theme_custom_form').val() || 'standard';
84 return data;
85 }
86 function apply_form_theme() {
87 var theme = get_form().find('[name="booking_form_theme"]:checked').val() || '';
88 var $preview = $('[data-wpbc-theme-preview="1"]');
89 $preview.removeClass('wpbc_theme_dark_1');
90 if (theme) {
91 $preview.addClass(theme);
92 }
93 $('.wpbc_theme_choice').removeClass('is-selected');
94 get_form().find('[name="booking_form_theme"]:checked').closest('.wpbc_theme_choice').addClass('is-selected');
95 }
96 function apply_calendar_skin() {
97 var $select = $('[data-wpbc-theme-calendar-skin="1"]');
98 var value = $select.find('option:selected').attr('data-wpbc-calendar-skin-url') || $select.val() || '';
99 var skin_url = value ? make_asset_url(value) : '';
100 if (skin_url && typeof w.wpbc__calendar__change_skin === 'function' && $('#wpbc-calendar-skin-css').length) {
101 w.wpbc__calendar__change_skin(skin_url);
102 }
103 }
104 function apply_time_skin() {
105 var value = $('[data-wpbc-theme-time-skin="1"]').val() || '';
106 var skin_url = value ? make_asset_url(value) : '';
107 if (skin_url && typeof w.wpbc__css__change_skin === 'function' && $('#wpbc-time_picker-skin-css').length) {
108 w.wpbc__css__change_skin(skin_url, 'wpbc-time_picker-skin-css');
109 }
110 }
111 function select_if_option_exists($select, value) {
112 var $option;
113 if (!$select.length || !value) {
114 return false;
115 }
116 $option = $select.find('option[value="' + value + '"]');
117 if (!$option.length) {
118 return false;
119 }
120 if ($select.val() === value) {
121 return false;
122 }
123 $select.val(value).trigger('change');
124 return true;
125 }
126 function parse_number_list(value) {
127 if (Array.isArray(value)) {
128 return $.map(value, function (item) {
129 var parsed = parseInt(item, 10);
130 return isNaN(parsed) ? null : parsed;
131 });
132 }
133 return $.map(String(value || '').split(/\s*,\s*/), function (item) {
134 var parsed = parseInt(item, 10);
135 return '' === item || isNaN(parsed) ? null : parsed;
136 });
137 }
138 function set_calendar_param(resource_id, key, value) {
139 if (w._wpbc && typeof w._wpbc.calendar__set_param_value === 'function') {
140 w._wpbc.calendar__set_param_value(resource_id, key, value);
141 }
142 }
143 function apply_days_selection_to_calendar(resource_id, days_selection, should_reinit) {
144 var ds = days_selection || {};
145 var fixed_week_days;
146 var dynamic_specific;
147 var dynamic_week_days;
148 if (!resource_id || !w._wpbc || typeof w._wpbc.calendar__set_param_value !== 'function') {
149 return;
150 }
151 fixed_week_days = parse_number_list(ds.fixed__week_days__start);
152 dynamic_specific = parse_number_list(ds.dynamic__days_specific);
153 dynamic_week_days = parse_number_list(ds.dynamic__week_days__start);
154 set_calendar_param(resource_id, 'days_select_mode', String(ds.days_select_mode || 'multiple'));
155 set_calendar_param(resource_id, 'fixed__days_num', parseInt(ds.fixed__days_num || 0, 10));
156 set_calendar_param(resource_id, 'fixed__week_days__start', fixed_week_days.length ? fixed_week_days : [-1]);
157 set_calendar_param(resource_id, 'dynamic__days_min', parseInt(ds.dynamic__days_min || 0, 10));
158 set_calendar_param(resource_id, 'dynamic__days_max', parseInt(ds.dynamic__days_max || 0, 10));
159 set_calendar_param(resource_id, 'dynamic__days_specific', dynamic_specific);
160 set_calendar_param(resource_id, 'dynamic__week_days__start', dynamic_week_days.length ? dynamic_week_days : [-1]);
161 if (typeof w.wpbc__conditions__SAVE_INITIAL__days_selection_params__bm === 'function') {
162 w.wpbc__conditions__SAVE_INITIAL__days_selection_params__bm(resource_id);
163 }
164 if (should_reinit && typeof w.wpbc_cal__re_init === 'function') {
165 w.wpbc_cal__re_init(resource_id);
166 }
167 }
168 function ensure_calendar_only_days_selection() {
169 var $preview = $('[data-wpbc-theme-preview="1"]').first();
170 var preview_mode = $preview.attr('data-preview-mode') || $('#wpbc_theme_preview_mode').val() || 'calendar';
171 var resource_id = parseInt($preview.attr('data-resource-id') || 0, 10);
172 var expected = cfg.days_selection || {};
173 var expected_mode = String(expected.days_select_mode || 'multiple');
174 var current_mode = null;
175 var $calendar;
176 var should_reinit = false;
177 if ('calendar' !== preview_mode || !resource_id || !expected_mode) {
178 return;
179 }
180 if (!w._wpbc || typeof w._wpbc.calendar__get_param_value !== 'function') {
181 return;
182 }
183 current_mode = w._wpbc.calendar__get_param_value(resource_id, 'days_select_mode');
184 if (String(current_mode || '') === expected_mode) {
185 return;
186 }
187 $calendar = $('#calendar_booking' + resource_id);
188 should_reinit = $calendar.length && $calendar.hasClass('hasDatepick');
189 apply_days_selection_to_calendar(resource_id, expected, should_reinit);
190 }
191 function apply_related_skins_for_theme(theme) {
192 var calendar_skin = theme ? '/css/skins/24_9__dark_1.css' : '/css/skins/25_5__square_1.css';
193 var time_skin = theme ? '/css/time_picker_skins/black.css' : '/css/time_picker_skins/light__24_8.css';
194 select_if_option_exists($('[data-wpbc-theme-calendar-skin="1"]'), calendar_skin);
195 select_if_option_exists($('[data-wpbc-theme-time-skin="1"]'), time_skin);
196 }
197 function pulse_preview_mode_control() {
198 var $control = $('.wpbc_theme_control_preview_mode').first();
199 pulse_element($control);
200 clearTimeout(preview_notice_timer);
201 preview_notice_timer = setTimeout(function () {
202 $control.removeClass('wpbc_theme_attention_pulse');
203 }, 2100);
204 }
205 function get_preview_notice_message(notice_type) {
206 var i18n = cfg.i18n || {};
207 if ('form' === notice_type) {
208 return i18n.form_preview_option_notice || 'This option is visible in the Booking form preview. Switch Preview to Booking form to inspect it.';
209 }
210 return '';
211 }
212 function maybe_show_preview_notice($source) {
213 var notice_type = $source.attr('data-wpbc-theme-preview-notice') || '';
214 var preview_mode = $('#wpbc_theme_preview_mode').val() || 'calendar';
215 var message = get_preview_notice_message(notice_type);
216 var $control = $('.wpbc_theme_control_preview_mode').first();
217 if (!message) {
218 return;
219 }
220 if ('form' === notice_type && 'calendar' !== preview_mode) {
221 return;
222 }
223 if ('form' === notice_type) {
224 pulse_preview_mode_control();
225 show_highlighted_notice(message, 'warning', 9000);
226 return;
227 }
228 show_highlighted_notice(message, 'warning', 9000, $control);
229 }
230 function show_calendar_only_theme_notice() {
231 var preview_mode = $('#wpbc_theme_preview_mode').val() || 'calendar';
232 if ('calendar' !== preview_mode) {
233 return;
234 }
235 pulse_preview_mode_control();
236 show_highlighted_notice(cfg.i18n && cfg.i18n.calendar_only_theme_notice ? cfg.i18n.calendar_only_theme_notice : 'Preview is set to Calendar only. Switch Preview to Booking form to inspect the form theme.', 'warning', 9000);
237 }
238 function sync_time_picker_preview() {
239 var is_enabled = get_form().find('[name="booking_timeslot_picker"]').prop('checked');
240 var $preview = $('[data-wpbc-theme-preview="1"]');
241 var time_selectors = 'select[name^="rangetime"], select[name^="starttime"], select[name^="endtime"], select[name^="durationtime"]';
242 if (w._wpbc && typeof w._wpbc.set_other_param === 'function') {
243 w._wpbc.set_other_param('is_enabled_booking_timeslot_picker', !!is_enabled);
244 }
245 if (is_enabled) {
246 if (w._wpbc && typeof w.wpbc_hook__init_timeselector === 'function') {
247 w.wpbc_hook__init_timeselector();
248 }
249 return;
250 }
251 $preview.find('.wpbc_times_selector').remove();
252 $preview.find(time_selectors).show();
253 }
254 function refresh_preview_mode_controls() {
255 var preview_mode = $('#wpbc_theme_preview_mode').val() || 'calendar';
256 $('[data-wpbc-theme-form-control="1"]').toggleClass('is-visible', 'form' === preview_mode);
257 }
258 function set_calendar_loading(is_loading) {
259 var $panel = $('[data-wpbc-theme-calendar-panel="1"]');
260 $panel.toggleClass('is-loading', !!is_loading);
261 $panel.find('.wpbc_theme_calendar_loading').remove();
262 if (is_loading) {
263 $panel.append('<div class="wpbc_calendar_loading wpbc_theme_calendar_loading">' + '<span class="wpbc_icn_autorenew wpbc_animation_spin"></span>&nbsp;' + trim_text(cfg.i18n && cfg.i18n.loading ? cfg.i18n.loading : 'Loading') + '</div>');
264 }
265 }
266 function refresh_preview() {
267 var data = collect_payload();
268 if (preview_ajax && preview_ajax.readyState !== 4) {
269 preview_ajax.abort();
270 }
271 data.action = cfg.preview_action;
272 data.nonce = cfg.nonce;
273 set_calendar_loading(true);
274 preview_ajax = $.post(cfg.ajax_url, data).done(function (response) {
275 if (response && response.success && response.data && response.data.html) {
276 $('[data-wpbc-theme-preview="1"]').replaceWith(response.data.html);
277 if (response.data.days_selection) {
278 cfg.days_selection = response.data.days_selection;
279 }
280 apply_form_theme();
281 apply_calendar_skin();
282 apply_time_skin();
283 ensure_calendar_only_days_selection();
284 sync_time_picker_preview();
285 return;
286 }
287 show_message(response && response.data && response.data.message ? response.data.message : cfg.i18n && cfg.i18n.preview_failed ? cfg.i18n.preview_failed : 'Unable to refresh calendar preview.', 'error', 10000);
288 }).fail(function (xhr, text_status) {
289 if ('abort' === text_status) {
290 return;
291 }
292 show_message(cfg.i18n && cfg.i18n.preview_failed ? cfg.i18n.preview_failed : 'Unable to refresh calendar preview.', 'error', 10000);
293 }).always(function () {
294 set_calendar_loading(false);
295 });
296 }
297 function schedule_preview_refresh() {
298 clearTimeout(preview_timer);
299 preview_timer = setTimeout(refresh_preview, 180);
300 }
301 function save_settings() {
302 var $button = $('[data-wpbc-theme-save="1"]');
303 var original_text = $button.data('wpbc-original-text');
304 var data = collect_payload();
305 if (!original_text) {
306 original_text = $button.html();
307 $button.data('wpbc-original-text', original_text);
308 }
309 data.action = cfg.action;
310 data.nonce = cfg.nonce;
311 $button.addClass('disabled').attr('aria-disabled', 'true');
312 $button.find('.in-button-text').html('&nbsp;&nbsp;' + trim_text(cfg.i18n && cfg.i18n.saving ? cfg.i18n.saving : 'Saving') + '...');
313 $.post(cfg.ajax_url, data).done(function (response) {
314 if (response && response.success) {
315 show_message(response.data && response.data.message ? response.data.message : cfg.i18n && cfg.i18n.saved ? cfg.i18n.saved : 'Saved', 'success', 3000);
316 cfg.settings = response.data && response.data.settings ? response.data.settings : cfg.settings;
317 return;
318 }
319 show_message(response && response.data && response.data.message ? response.data.message : cfg.i18n && cfg.i18n.save_failed ? cfg.i18n.save_failed : 'Unable to save appearance settings.', 'error', 10000);
320 }).fail(function () {
321 show_message(cfg.i18n && cfg.i18n.save_failed ? cfg.i18n.save_failed : 'Unable to save appearance settings.', 'error', 10000);
322 }).always(function () {
323 $button.removeClass('disabled').removeAttr('aria-disabled').html(original_text);
324 });
325 }
326 function bind_events() {
327 $(document).on('click', '.wpbc_theme_rightbar_tabs [role="tab"]', function (event) {
328 event.preventDefault();
329 switch_panel($(this));
330 });
331 $(document).on('click', '.wpbc_theme_premium_dismiss a', function (event) {
332 event.stopPropagation();
333 });
334 $(document).on('click', '.wpbc_theme_rightbar_panels .wpbc_ui__collapsible_group > .group__header', function (event) {
335 event.preventDefault();
336 toggle_group($(this));
337 });
338 $(document).on('click', '[data-wpbc-theme-save="1"]', function (event) {
339 event.preventDefault();
340 if (!$(this).hasClass('disabled')) {
341 save_settings();
342 }
343 });
344 $(document).on('submit', '[data-wpbc-theme-settings-form="1"]', function () {
345 return true;
346 });
347 $(document).on('change', '[name="booking_form_theme"]', function () {
348 apply_form_theme();
349 apply_related_skins_for_theme($(this).val() || '');
350 show_calendar_only_theme_notice();
351 });
352 $(document).on('change', '[data-wpbc-theme-calendar-skin="1"]', function () {
353 apply_calendar_skin();
354 });
355 $(document).on('change', '[data-wpbc-theme-time-skin="1"]', function () {
356 apply_time_skin();
357 });
358 $(document).on('change', '[name="booking_timeslot_picker"]', function () {
359 sync_time_picker_preview();
360 schedule_preview_refresh();
361 });
362 $(document).on('change', '[data-wpbc-theme-preview-notice]', function () {
363 maybe_show_preview_notice($(this));
364 });
365 $(document).on('change', '#wpbc_theme_resource_id, #wpbc_theme_months_count, #wpbc_theme_custom_form', function () {
366 schedule_preview_refresh();
367 });
368 $(document).on('change', '#wpbc_theme_preview_mode', function () {
369 refresh_preview_mode_controls();
370 schedule_preview_refresh();
371 });
372 }
373 $(function () {
374 if (!$('[data-wpbc-theme-page="1"]').length) {
375 return;
376 }
377 bind_events();
378 refresh_preview_mode_controls();
379 apply_form_theme();
380 ensure_calendar_only_days_selection();
381 sync_time_picker_preview();
382 });
383 })(jQuery, window);
384 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1zZXR0aW5ncy10aGVtZXMvX291dC9zZXR0aW5nc190aGVtZXNfcGFnZS5qcyIsIm5hbWVzIjpbIiQiLCJ3IiwiY2ZnIiwid3BiY19zZXR0aW5nc190aGVtZXNfcGFnZSIsInByZXZpZXdfYWpheCIsInByZXZpZXdfdGltZXIiLCJwcmV2aWV3X25vdGljZV90aW1lciIsInByZXZpZXdfbm90aWNlX21lc3NhZ2VfdGltZXIiLCJ0cmltX3RleHQiLCJ2YWx1ZSIsIlN0cmluZyIsInRyaW0iLCJtYWtlX2Fzc2V0X3VybCIsInBhdGgiLCJ0ZXN0IiwicGx1Z2luX3VybCIsInJlcGxhY2UiLCJzaG93X21lc3NhZ2UiLCJtZXNzYWdlIiwidHlwZSIsImRlbGF5Iiwid3BiY19hZG1pbl9zaG93X21lc3NhZ2UiLCJwdWxzZV9lbGVtZW50IiwiJGVsZW1lbnQiLCJkdXJhdGlvbiIsImxlbmd0aCIsInJlbW92ZUNsYXNzIiwiZWFjaCIsIm9mZnNldFdpZHRoIiwiYWRkQ2xhc3MiLCJzZXRUaW1lb3V0IiwicHVsc2VfbGF0ZXN0X3dhcm5pbmdfbm90aWNlIiwiY2xlYXJUaW1lb3V0IiwibGFzdCIsInNob3dfaGlnaGxpZ2h0ZWRfbm90aWNlIiwiJGNvbnRyb2wiLCJzd2l0Y2hfcGFuZWwiLCIkdGFiIiwicGFuZWxfaWQiLCJhdHRyIiwiJHRhYnMiLCJjbG9zZXN0IiwiZmluZCIsIiRwYW5lbHMiLCJyZW1vdmVBdHRyIiwidG9nZ2xlX2dyb3VwIiwiJGJ1dHRvbiIsIiRncm91cCIsIiRmaWVsZHMiLCJpc19vcGVuIiwiaGFzQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsInByb3AiLCJnZXRfZm9ybSIsImZpcnN0IiwiY29sbGVjdF9wYXlsb2FkIiwiJGZvcm0iLCJkYXRhIiwic2VyaWFsaXplQXJyYXkiLCJpbmRleCIsIml0ZW0iLCJuYW1lIiwiYm9va2luZ190aW1lc2xvdF9waWNrZXIiLCJyZXNvdXJjZV9pZCIsInZhbCIsIm1vbnRoc19jb3VudCIsInByZXZpZXdfbW9kZSIsImN1c3RvbV9ib29raW5nX2Zvcm0iLCJhcHBseV9mb3JtX3RoZW1lIiwidGhlbWUiLCIkcHJldmlldyIsImFwcGx5X2NhbGVuZGFyX3NraW4iLCIkc2VsZWN0Iiwic2tpbl91cmwiLCJ3cGJjX19jYWxlbmRhcl9fY2hhbmdlX3NraW4iLCJhcHBseV90aW1lX3NraW4iLCJ3cGJjX19jc3NfX2NoYW5nZV9za2luIiwic2VsZWN0X2lmX29wdGlvbl9leGlzdHMiLCIkb3B0aW9uIiwidHJpZ2dlciIsInBhcnNlX251bWJlcl9saXN0IiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwicGFyc2VkIiwicGFyc2VJbnQiLCJpc05hTiIsInNwbGl0Iiwic2V0X2NhbGVuZGFyX3BhcmFtIiwia2V5IiwiX3dwYmMiLCJjYWxlbmRhcl9fc2V0X3BhcmFtX3ZhbHVlIiwiYXBwbHlfZGF5c19zZWxlY3Rpb25fdG9fY2FsZW5kYXIiLCJkYXlzX3NlbGVjdGlvbiIsInNob3VsZF9yZWluaXQiLCJkcyIsImZpeGVkX3dlZWtfZGF5cyIsImR5bmFtaWNfc3BlY2lmaWMiLCJkeW5hbWljX3dlZWtfZGF5cyIsImZpeGVkX193ZWVrX2RheXNfX3N0YXJ0IiwiZHluYW1pY19fZGF5c19zcGVjaWZpYyIsImR5bmFtaWNfX3dlZWtfZGF5c19fc3RhcnQiLCJkYXlzX3NlbGVjdF9tb2RlIiwiZml4ZWRfX2RheXNfbnVtIiwiZHluYW1pY19fZGF5c19taW4iLCJkeW5hbWljX19kYXlzX21heCIsIndwYmNfX2NvbmRpdGlvbnNfX1NBVkVfSU5JVElBTF9fZGF5c19zZWxlY3Rpb25fcGFyYW1zX19ibSIsIndwYmNfY2FsX19yZV9pbml0IiwiZW5zdXJlX2NhbGVuZGFyX29ubHlfZGF5c19zZWxlY3Rpb24iLCJleHBlY3RlZCIsImV4cGVjdGVkX21vZGUiLCJjdXJyZW50X21vZGUiLCIkY2FsZW5kYXIiLCJjYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlIiwiYXBwbHlfcmVsYXRlZF9za2luc19mb3JfdGhlbWUiLCJjYWxlbmRhcl9za2luIiwidGltZV9za2luIiwicHVsc2VfcHJldmlld19tb2RlX2NvbnRyb2wiLCJnZXRfcHJldmlld19ub3RpY2VfbWVzc2FnZSIsIm5vdGljZV90eXBlIiwiaTE4biIsImZvcm1fcHJldmlld19vcHRpb25fbm90aWNlIiwibWF5YmVfc2hvd19wcmV2aWV3X25vdGljZSIsIiRzb3VyY2UiLCJzaG93X2NhbGVuZGFyX29ubHlfdGhlbWVfbm90aWNlIiwiY2FsZW5kYXJfb25seV90aGVtZV9ub3RpY2UiLCJzeW5jX3RpbWVfcGlja2VyX3ByZXZpZXciLCJpc19lbmFibGVkIiwidGltZV9zZWxlY3RvcnMiLCJzZXRfb3RoZXJfcGFyYW0iLCJ3cGJjX2hvb2tfX2luaXRfdGltZXNlbGVjdG9yIiwicmVtb3ZlIiwic2hvdyIsInJlZnJlc2hfcHJldmlld19tb2RlX2NvbnRyb2xzIiwic2V0X2NhbGVuZGFyX2xvYWRpbmciLCJpc19sb2FkaW5nIiwiJHBhbmVsIiwiYXBwZW5kIiwibG9hZGluZyIsInJlZnJlc2hfcHJldmlldyIsInJlYWR5U3RhdGUiLCJhYm9ydCIsImFjdGlvbiIsInByZXZpZXdfYWN0aW9uIiwibm9uY2UiLCJwb3N0IiwiYWpheF91cmwiLCJkb25lIiwicmVzcG9uc2UiLCJzdWNjZXNzIiwiaHRtbCIsInJlcGxhY2VXaXRoIiwicHJldmlld19mYWlsZWQiLCJmYWlsIiwieGhyIiwidGV4dF9zdGF0dXMiLCJhbHdheXMiLCJzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2giLCJzYXZlX3NldHRpbmdzIiwib3JpZ2luYWxfdGV4dCIsInNhdmluZyIsInNhdmVkIiwic2V0dGluZ3MiLCJzYXZlX2ZhaWxlZCIsImJpbmRfZXZlbnRzIiwiZG9jdW1lbnQiLCJvbiIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJqUXVlcnkiLCJ3aW5kb3ciXSwic291cmNlcyI6WyJpbmNsdWRlcy9wYWdlLXNldHRpbmdzLXRoZW1lcy9fc3JjL3NldHRpbmdzX3RoZW1lc19wYWdlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwZWFyYW5jZSAvIFRoZW1lIHNldHRpbmdzIHBhZ2UgVUkuXG4gKi9cbiggZnVuY3Rpb24gKCAkLCB3ICkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGNmZyA9IHcud3BiY19zZXR0aW5nc190aGVtZXNfcGFnZSB8fCB7fTtcblx0dmFyIHByZXZpZXdfYWpheCA9IG51bGw7XG5cdHZhciBwcmV2aWV3X3RpbWVyID0gMDtcblx0dmFyIHByZXZpZXdfbm90aWNlX3RpbWVyID0gMDtcblx0dmFyIHByZXZpZXdfbm90aWNlX21lc3NhZ2VfdGltZXIgPSAwO1xuXG5cdGZ1bmN0aW9uIHRyaW1fdGV4dCggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIFN0cmluZyggdmFsdWUgfHwgJycgKS50cmltKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBtYWtlX2Fzc2V0X3VybCggcGF0aCApIHtcblx0XHRwYXRoID0gU3RyaW5nKCBwYXRoIHx8ICcnICk7XG5cdFx0aWYgKCAvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KCBwYXRoICkgfHwgL15cXC9cXC8vLnRlc3QoIHBhdGggKSApIHtcblx0XHRcdHJldHVybiBwYXRoO1xuXHRcdH1cblx0XHRyZXR1cm4gU3RyaW5nKCBjZmcucGx1Z2luX3VybCB8fCAnJyApLnJlcGxhY2UoIC9cXC8kLywgJycgKSArIHBhdGg7XG5cdH1cblxuXHRmdW5jdGlvbiBzaG93X21lc3NhZ2UoIG1lc3NhZ2UsIHR5cGUsIGRlbGF5ICkge1xuXHRcdGlmICggdHlwZW9mIHcud3BiY19hZG1pbl9zaG93X21lc3NhZ2UgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHR3LndwYmNfYWRtaW5fc2hvd19tZXNzYWdlKCBtZXNzYWdlLCB0eXBlIHx8ICdpbmZvJywgZGVsYXkgfHwgNDAwMCwgZmFsc2UgKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBwdWxzZV9lbGVtZW50KCAkZWxlbWVudCwgZHVyYXRpb24gKSB7XG5cdFx0aWYgKCAhICRlbGVtZW50IHx8ICEgJGVsZW1lbnQubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdCRlbGVtZW50XG5cdFx0XHQucmVtb3ZlQ2xhc3MoICd3cGJjX3RoZW1lX2F0dGVudGlvbl9wdWxzZScgKVxuXHRcdFx0LmVhY2goIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dm9pZCB0aGlzLm9mZnNldFdpZHRoO1xuXHRcdFx0fSApXG5cdFx0XHQuYWRkQ2xhc3MoICd3cGJjX3RoZW1lX2F0dGVudGlvbl9wdWxzZScgKTtcblxuXHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcblx0XHRcdCRlbGVtZW50LnJlbW92ZUNsYXNzKCAnd3BiY190aGVtZV9hdHRlbnRpb25fcHVsc2UnICk7XG5cdFx0fSwgZHVyYXRpb24gfHwgMjEwMCApO1xuXHR9XG5cblx0ZnVuY3Rpb24gcHVsc2VfbGF0ZXN0X3dhcm5pbmdfbm90aWNlKCkge1xuXHRcdGNsZWFyVGltZW91dCggcHJldmlld19ub3RpY2VfbWVzc2FnZV90aW1lciApO1xuXHRcdHByZXZpZXdfbm90aWNlX21lc3NhZ2VfdGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwdWxzZV9lbGVtZW50KCAkKCAnI2FqYXhfd29ya2luZyAud3BiY19pbm5lcl9tZXNzYWdlLm5vdGljZS13YXJuaW5nJyApLmxhc3QoKSApO1xuXHRcdH0sIDUwICk7XG5cdH1cblxuXHRmdW5jdGlvbiBzaG93X2hpZ2hsaWdodGVkX25vdGljZSggbWVzc2FnZSwgdHlwZSwgZGVsYXksICRjb250cm9sICkge1xuXHRcdGlmICggJGNvbnRyb2wgJiYgJGNvbnRyb2wubGVuZ3RoICkge1xuXHRcdFx0cHVsc2VfZWxlbWVudCggJGNvbnRyb2wgKTtcblx0XHR9XG5cblx0XHRzaG93X21lc3NhZ2UoIG1lc3NhZ2UsIHR5cGUgfHwgJ3dhcm5pbmcnLCBkZWxheSB8fCA5MDAwICk7XG5cdFx0cHVsc2VfbGF0ZXN0X3dhcm5pbmdfbm90aWNlKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBzd2l0Y2hfcGFuZWwoICR0YWIgKSB7XG5cdFx0dmFyIHBhbmVsX2lkID0gJHRhYi5hdHRyKCAnYXJpYS1jb250cm9scycgKTtcblx0XHR2YXIgJHRhYnMgPSAkdGFiLmNsb3Nlc3QoICcud3BiY190aGVtZV9yaWdodGJhcl90YWJzJyApLmZpbmQoICdbcm9sZT1cInRhYlwiXScgKTtcblx0XHR2YXIgJHBhbmVscyA9ICQoICcud3BiY190aGVtZV9yaWdodGJhcl9wYW5lbHMgW3JvbGU9XCJ0YWJwYW5lbFwiXScgKTtcblxuXHRcdCR0YWJzLmF0dHIoICdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyApO1xuXHRcdCR0YWIuYXR0ciggJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScgKTtcblxuXHRcdCRwYW5lbHMuYXR0ciggJ2hpZGRlbicsICdoaWRkZW4nICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgJ3RydWUnICk7XG5cdFx0JCggJyMnICsgcGFuZWxfaWQgKS5yZW1vdmVBdHRyKCAnaGlkZGVuJyApLmF0dHIoICdhcmlhLWhpZGRlbicsICdmYWxzZScgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHRvZ2dsZV9ncm91cCggJGJ1dHRvbiApIHtcblx0XHR2YXIgJGdyb3VwID0gJGJ1dHRvbi5jbG9zZXN0KCAnLndwYmNfdWlfX2NvbGxhcHNpYmxlX2dyb3VwJyApO1xuXHRcdHZhciAkZmllbGRzID0gJGdyb3VwLmZpbmQoICc+IC5ncm91cF9fZmllbGRzJyApO1xuXHRcdHZhciBpc19vcGVuID0gJGdyb3VwLmhhc0NsYXNzKCAnaXMtb3BlbicgKTtcblxuXHRcdCRncm91cC50b2dnbGVDbGFzcyggJ2lzLW9wZW4nLCAhIGlzX29wZW4gKTtcblx0XHQkYnV0dG9uLmF0dHIoICdhcmlhLWV4cGFuZGVkJywgaXNfb3BlbiA/ICdmYWxzZScgOiAndHJ1ZScgKTtcblx0XHQkZmllbGRzLnByb3AoICdoaWRkZW4nLCBpc19vcGVuICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgaXNfb3BlbiA/ICd0cnVlJyA6ICdmYWxzZScgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldF9mb3JtKCkge1xuXHRcdHJldHVybiAkKCAnW2RhdGEtd3BiYy10aGVtZS1zZXR0aW5ncy1mb3JtPVwiMVwiXScgKS5maXJzdCgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29sbGVjdF9wYXlsb2FkKCkge1xuXHRcdHZhciAkZm9ybSA9IGdldF9mb3JtKCk7XG5cdFx0dmFyIGRhdGEgPSB7fTtcblxuXHRcdCQuZWFjaCggJGZvcm0uc2VyaWFsaXplQXJyYXkoKSwgZnVuY3Rpb24gKCBpbmRleCwgaXRlbSApIHtcblx0XHRcdGRhdGFbIGl0ZW0ubmFtZSBdID0gaXRlbS52YWx1ZTtcblx0XHR9ICk7XG5cblx0XHRkYXRhLmJvb2tpbmdfdGltZXNsb3RfcGlja2VyID0gJGZvcm0uZmluZCggJ1tuYW1lPVwiYm9va2luZ190aW1lc2xvdF9waWNrZXJcIl0nICkucHJvcCggJ2NoZWNrZWQnICkgPyAnT24nIDogJ09mZic7XG5cdFx0ZGF0YS5yZXNvdXJjZV9pZCA9ICQoICcjd3BiY190aGVtZV9yZXNvdXJjZV9pZCcgKS52YWwoKSB8fCAnJztcblx0XHRkYXRhLm1vbnRoc19jb3VudCA9ICQoICcjd3BiY190aGVtZV9tb250aHNfY291bnQnICkudmFsKCkgfHwgJyc7XG5cdFx0ZGF0YS5wcmV2aWV3X21vZGUgPSAkKCAnI3dwYmNfdGhlbWVfcHJldmlld19tb2RlJyApLnZhbCgpIHx8ICdjYWxlbmRhcic7XG5cdFx0ZGF0YS5jdXN0b21fYm9va2luZ19mb3JtID0gJCggJyN3cGJjX3RoZW1lX2N1c3RvbV9mb3JtJyApLnZhbCgpIHx8ICdzdGFuZGFyZCc7XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGx5X2Zvcm1fdGhlbWUoKSB7XG5cdFx0dmFyIHRoZW1lID0gZ2V0X2Zvcm0oKS5maW5kKCAnW25hbWU9XCJib29raW5nX2Zvcm1fdGhlbWVcIl06Y2hlY2tlZCcgKS52YWwoKSB8fCAnJztcblx0XHR2YXIgJHByZXZpZXcgPSAkKCAnW2RhdGEtd3BiYy10aGVtZS1wcmV2aWV3PVwiMVwiXScgKTtcblxuXHRcdCRwcmV2aWV3LnJlbW92ZUNsYXNzKCAnd3BiY190aGVtZV9kYXJrXzEnICk7XG5cdFx0aWYgKCB0aGVtZSApIHtcblx0XHRcdCRwcmV2aWV3LmFkZENsYXNzKCB0aGVtZSApO1xuXHRcdH1cblxuXHRcdCQoICcud3BiY190aGVtZV9jaG9pY2UnICkucmVtb3ZlQ2xhc3MoICdpcy1zZWxlY3RlZCcgKTtcblx0XHRnZXRfZm9ybSgpLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfZm9ybV90aGVtZVwiXTpjaGVja2VkJyApLmNsb3Nlc3QoICcud3BiY190aGVtZV9jaG9pY2UnICkuYWRkQ2xhc3MoICdpcy1zZWxlY3RlZCcgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGx5X2NhbGVuZGFyX3NraW4oKSB7XG5cdFx0dmFyICRzZWxlY3QgPSAkKCAnW2RhdGEtd3BiYy10aGVtZS1jYWxlbmRhci1za2luPVwiMVwiXScgKTtcblx0XHR2YXIgdmFsdWUgPSAkc2VsZWN0LmZpbmQoICdvcHRpb246c2VsZWN0ZWQnICkuYXR0ciggJ2RhdGEtd3BiYy1jYWxlbmRhci1za2luLXVybCcgKSB8fCAkc2VsZWN0LnZhbCgpIHx8ICcnO1xuXHRcdHZhciBza2luX3VybCA9IHZhbHVlID8gbWFrZV9hc3NldF91cmwoIHZhbHVlICkgOiAnJztcblxuXHRcdGlmICggc2tpbl91cmwgJiYgdHlwZW9mIHcud3BiY19fY2FsZW5kYXJfX2NoYW5nZV9za2luID09PSAnZnVuY3Rpb24nICYmICQoICcjd3BiYy1jYWxlbmRhci1za2luLWNzcycgKS5sZW5ndGggKSB7XG5cdFx0XHR3LndwYmNfX2NhbGVuZGFyX19jaGFuZ2Vfc2tpbiggc2tpbl91cmwgKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBseV90aW1lX3NraW4oKSB7XG5cdFx0dmFyIHZhbHVlID0gJCggJ1tkYXRhLXdwYmMtdGhlbWUtdGltZS1za2luPVwiMVwiXScgKS52YWwoKSB8fCAnJztcblx0XHR2YXIgc2tpbl91cmwgPSB2YWx1ZSA/IG1ha2VfYXNzZXRfdXJsKCB2YWx1ZSApIDogJyc7XG5cblx0XHRpZiAoIHNraW5fdXJsICYmIHR5cGVvZiB3LndwYmNfX2Nzc19fY2hhbmdlX3NraW4gPT09ICdmdW5jdGlvbicgJiYgJCggJyN3cGJjLXRpbWVfcGlja2VyLXNraW4tY3NzJyApLmxlbmd0aCApIHtcblx0XHRcdHcud3BiY19fY3NzX19jaGFuZ2Vfc2tpbiggc2tpbl91cmwsICd3cGJjLXRpbWVfcGlja2VyLXNraW4tY3NzJyApO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHNlbGVjdF9pZl9vcHRpb25fZXhpc3RzKCAkc2VsZWN0LCB2YWx1ZSApIHtcblx0XHR2YXIgJG9wdGlvbjtcblxuXHRcdGlmICggISAkc2VsZWN0Lmxlbmd0aCB8fCAhIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdCRvcHRpb24gPSAkc2VsZWN0LmZpbmQoICdvcHRpb25bdmFsdWU9XCInICsgdmFsdWUgKyAnXCJdJyApO1xuXHRcdGlmICggISAkb3B0aW9uLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoICRzZWxlY3QudmFsKCkgPT09IHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdCRzZWxlY3QudmFsKCB2YWx1ZSApLnRyaWdnZXIoICdjaGFuZ2UnICk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZV9udW1iZXJfbGlzdCggdmFsdWUgKSB7XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuICQubWFwKCB2YWx1ZSwgZnVuY3Rpb24gKCBpdGVtICkge1xuXHRcdFx0XHR2YXIgcGFyc2VkID0gcGFyc2VJbnQoIGl0ZW0sIDEwICk7XG5cdFx0XHRcdHJldHVybiBpc05hTiggcGFyc2VkICkgPyBudWxsIDogcGFyc2VkO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiAkLm1hcCggU3RyaW5nKCB2YWx1ZSB8fCAnJyApLnNwbGl0KCAvXFxzKixcXHMqLyApLCBmdW5jdGlvbiAoIGl0ZW0gKSB7XG5cdFx0XHR2YXIgcGFyc2VkID0gcGFyc2VJbnQoIGl0ZW0sIDEwICk7XG5cdFx0XHRyZXR1cm4gKCAnJyA9PT0gaXRlbSB8fCBpc05hTiggcGFyc2VkICkgKSA/IG51bGwgOiBwYXJzZWQ7XG5cdFx0fSApO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2V0X2NhbGVuZGFyX3BhcmFtKCByZXNvdXJjZV9pZCwga2V5LCB2YWx1ZSApIHtcblx0XHRpZiAoIHcuX3dwYmMgJiYgdHlwZW9mIHcuX3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSA9PT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdHcuX3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsIGtleSwgdmFsdWUgKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBseV9kYXlzX3NlbGVjdGlvbl90b19jYWxlbmRhciggcmVzb3VyY2VfaWQsIGRheXNfc2VsZWN0aW9uLCBzaG91bGRfcmVpbml0ICkge1xuXHRcdHZhciBkcyA9IGRheXNfc2VsZWN0aW9uIHx8IHt9O1xuXHRcdHZhciBmaXhlZF93ZWVrX2RheXM7XG5cdFx0dmFyIGR5bmFtaWNfc3BlY2lmaWM7XG5cdFx0dmFyIGR5bmFtaWNfd2Vla19kYXlzO1xuXG5cdFx0aWYgKCAhIHJlc291cmNlX2lkIHx8ICEgdy5fd3BiYyB8fCB0eXBlb2Ygdy5fd3BiYy5jYWxlbmRhcl9fc2V0X3BhcmFtX3ZhbHVlICE9PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZpeGVkX3dlZWtfZGF5cyA9IHBhcnNlX251bWJlcl9saXN0KCBkcy5maXhlZF9fd2Vla19kYXlzX19zdGFydCApO1xuXHRcdGR5bmFtaWNfc3BlY2lmaWMgPSBwYXJzZV9udW1iZXJfbGlzdCggZHMuZHluYW1pY19fZGF5c19zcGVjaWZpYyApO1xuXHRcdGR5bmFtaWNfd2Vla19kYXlzID0gcGFyc2VfbnVtYmVyX2xpc3QoIGRzLmR5bmFtaWNfX3dlZWtfZGF5c19fc3RhcnQgKTtcblxuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJywgU3RyaW5nKCBkcy5kYXlzX3NlbGVjdF9tb2RlIHx8ICdtdWx0aXBsZScgKSApO1xuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdmaXhlZF9fZGF5c19udW0nLCBwYXJzZUludCggZHMuZml4ZWRfX2RheXNfbnVtIHx8IDAsIDEwICkgKTtcblx0XHRzZXRfY2FsZW5kYXJfcGFyYW0oIHJlc291cmNlX2lkLCAnZml4ZWRfX3dlZWtfZGF5c19fc3RhcnQnLCBmaXhlZF93ZWVrX2RheXMubGVuZ3RoID8gZml4ZWRfd2Vla19kYXlzIDogWyAtMSBdICk7XG5cdFx0c2V0X2NhbGVuZGFyX3BhcmFtKCByZXNvdXJjZV9pZCwgJ2R5bmFtaWNfX2RheXNfbWluJywgcGFyc2VJbnQoIGRzLmR5bmFtaWNfX2RheXNfbWluIHx8IDAsIDEwICkgKTtcblx0XHRzZXRfY2FsZW5kYXJfcGFyYW0oIHJlc291cmNlX2lkLCAnZHluYW1pY19fZGF5c19tYXgnLCBwYXJzZUludCggZHMuZHluYW1pY19fZGF5c19tYXggfHwgMCwgMTAgKSApO1xuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdkeW5hbWljX19kYXlzX3NwZWNpZmljJywgZHluYW1pY19zcGVjaWZpYyApO1xuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdkeW5hbWljX193ZWVrX2RheXNfX3N0YXJ0JywgZHluYW1pY193ZWVrX2RheXMubGVuZ3RoID8gZHluYW1pY193ZWVrX2RheXMgOiBbIC0xIF0gKTtcblxuXHRcdGlmICggdHlwZW9mIHcud3BiY19fY29uZGl0aW9uc19fU0FWRV9JTklUSUFMX19kYXlzX3NlbGVjdGlvbl9wYXJhbXNfX2JtID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0dy53cGJjX19jb25kaXRpb25zX19TQVZFX0lOSVRJQUxfX2RheXNfc2VsZWN0aW9uX3BhcmFtc19fYm0oIHJlc291cmNlX2lkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBzaG91bGRfcmVpbml0ICYmIHR5cGVvZiB3LndwYmNfY2FsX19yZV9pbml0ID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0dy53cGJjX2NhbF9fcmVfaW5pdCggcmVzb3VyY2VfaWQgKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBlbnN1cmVfY2FsZW5kYXJfb25seV9kYXlzX3NlbGVjdGlvbigpIHtcblx0XHR2YXIgJHByZXZpZXcgPSAkKCAnW2RhdGEtd3BiYy10aGVtZS1wcmV2aWV3PVwiMVwiXScgKS5maXJzdCgpO1xuXHRcdHZhciBwcmV2aWV3X21vZGUgPSAkcHJldmlldy5hdHRyKCAnZGF0YS1wcmV2aWV3LW1vZGUnICkgfHwgJCggJyN3cGJjX3RoZW1lX3ByZXZpZXdfbW9kZScgKS52YWwoKSB8fCAnY2FsZW5kYXInO1xuXHRcdHZhciByZXNvdXJjZV9pZCA9IHBhcnNlSW50KCAkcHJldmlldy5hdHRyKCAnZGF0YS1yZXNvdXJjZS1pZCcgKSB8fCAwLCAxMCApO1xuXHRcdHZhciBleHBlY3RlZCA9IGNmZy5kYXlzX3NlbGVjdGlvbiB8fCB7fTtcblx0XHR2YXIgZXhwZWN0ZWRfbW9kZSA9IFN0cmluZyggZXhwZWN0ZWQuZGF5c19zZWxlY3RfbW9kZSB8fCAnbXVsdGlwbGUnICk7XG5cdFx0dmFyIGN1cnJlbnRfbW9kZSA9IG51bGw7XG5cdFx0dmFyICRjYWxlbmRhcjtcblx0XHR2YXIgc2hvdWxkX3JlaW5pdCA9IGZhbHNlO1xuXG5cdFx0aWYgKCAnY2FsZW5kYXInICE9PSBwcmV2aWV3X21vZGUgfHwgISByZXNvdXJjZV9pZCB8fCAhIGV4cGVjdGVkX21vZGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCAhIHcuX3dwYmMgfHwgdHlwZW9mIHcuX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSAhPT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjdXJyZW50X21vZGUgPSB3Ll93cGJjLmNhbGVuZGFyX19nZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCAnZGF5c19zZWxlY3RfbW9kZScgKTtcblx0XHRpZiAoIFN0cmluZyggY3VycmVudF9tb2RlIHx8ICcnICkgPT09IGV4cGVjdGVkX21vZGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0JGNhbGVuZGFyID0gJCggJyNjYWxlbmRhcl9ib29raW5nJyArIHJlc291cmNlX2lkICk7XG5cdFx0c2hvdWxkX3JlaW5pdCA9ICRjYWxlbmRhci5sZW5ndGggJiYgJGNhbGVuZGFyLmhhc0NsYXNzKCAnaGFzRGF0ZXBpY2snICk7XG5cblx0XHRhcHBseV9kYXlzX3NlbGVjdGlvbl90b19jYWxlbmRhciggcmVzb3VyY2VfaWQsIGV4cGVjdGVkLCBzaG91bGRfcmVpbml0ICk7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBseV9yZWxhdGVkX3NraW5zX2Zvcl90aGVtZSggdGhlbWUgKSB7XG5cdFx0dmFyIGNhbGVuZGFyX3NraW4gPSB0aGVtZSA/ICcvY3NzL3NraW5zLzI0XzlfX2RhcmtfMS5jc3MnIDogJy9jc3Mvc2tpbnMvMjVfNV9fc3F1YXJlXzEuY3NzJztcblx0XHR2YXIgdGltZV9za2luID0gdGhlbWUgPyAnL2Nzcy90aW1lX3BpY2tlcl9za2lucy9ibGFjay5jc3MnIDogJy9jc3MvdGltZV9waWNrZXJfc2tpbnMvbGlnaHRfXzI0XzguY3NzJztcblxuXHRcdHNlbGVjdF9pZl9vcHRpb25fZXhpc3RzKCAkKCAnW2RhdGEtd3BiYy10aGVtZS1jYWxlbmRhci1za2luPVwiMVwiXScgKSwgY2FsZW5kYXJfc2tpbiApO1xuXHRcdHNlbGVjdF9pZl9vcHRpb25fZXhpc3RzKCAkKCAnW2RhdGEtd3BiYy10aGVtZS10aW1lLXNraW49XCIxXCJdJyApLCB0aW1lX3NraW4gKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHB1bHNlX3ByZXZpZXdfbW9kZV9jb250cm9sKCkge1xuXHRcdHZhciAkY29udHJvbCA9ICQoICcud3BiY190aGVtZV9jb250cm9sX3ByZXZpZXdfbW9kZScgKS5maXJzdCgpO1xuXG5cdFx0cHVsc2VfZWxlbWVudCggJGNvbnRyb2wgKTtcblxuXHRcdGNsZWFyVGltZW91dCggcHJldmlld19ub3RpY2VfdGltZXIgKTtcblx0XHRwcmV2aWV3X25vdGljZV90aW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcblx0XHRcdCRjb250cm9sLnJlbW92ZUNsYXNzKCAnd3BiY190aGVtZV9hdHRlbnRpb25fcHVsc2UnICk7XG5cdFx0fSwgMjEwMCApO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0X3ByZXZpZXdfbm90aWNlX21lc3NhZ2UoIG5vdGljZV90eXBlICkge1xuXHRcdHZhciBpMThuID0gY2ZnLmkxOG4gfHwge307XG5cblx0XHRpZiAoICdmb3JtJyA9PT0gbm90aWNlX3R5cGUgKSB7XG5cdFx0XHRyZXR1cm4gaTE4bi5mb3JtX3ByZXZpZXdfb3B0aW9uX25vdGljZSB8fCAnVGhpcyBvcHRpb24gaXMgdmlzaWJsZSBpbiB0aGUgQm9va2luZyBmb3JtIHByZXZpZXcuIFN3aXRjaCBQcmV2aWV3IHRvIEJvb2tpbmcgZm9ybSB0byBpbnNwZWN0IGl0Lic7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0ZnVuY3Rpb24gbWF5YmVfc2hvd19wcmV2aWV3X25vdGljZSggJHNvdXJjZSApIHtcblx0XHR2YXIgbm90aWNlX3R5cGUgPSAkc291cmNlLmF0dHIoICdkYXRhLXdwYmMtdGhlbWUtcHJldmlldy1ub3RpY2UnICkgfHwgJyc7XG5cdFx0dmFyIHByZXZpZXdfbW9kZSA9ICQoICcjd3BiY190aGVtZV9wcmV2aWV3X21vZGUnICkudmFsKCkgfHwgJ2NhbGVuZGFyJztcblx0XHR2YXIgbWVzc2FnZSA9IGdldF9wcmV2aWV3X25vdGljZV9tZXNzYWdlKCBub3RpY2VfdHlwZSApO1xuXHRcdHZhciAkY29udHJvbCA9ICQoICcud3BiY190aGVtZV9jb250cm9sX3ByZXZpZXdfbW9kZScgKS5maXJzdCgpO1xuXG5cdFx0aWYgKCAhIG1lc3NhZ2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCAnZm9ybScgPT09IG5vdGljZV90eXBlICYmICdjYWxlbmRhcicgIT09IHByZXZpZXdfbW9kZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoICdmb3JtJyA9PT0gbm90aWNlX3R5cGUgKSB7XG5cdFx0XHRwdWxzZV9wcmV2aWV3X21vZGVfY29udHJvbCgpO1xuXHRcdFx0c2hvd19oaWdobGlnaHRlZF9ub3RpY2UoIG1lc3NhZ2UsICd3YXJuaW5nJywgOTAwMCApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHNob3dfaGlnaGxpZ2h0ZWRfbm90aWNlKCBtZXNzYWdlLCAnd2FybmluZycsIDkwMDAsICRjb250cm9sICk7XG5cdH1cblxuXHRmdW5jdGlvbiBzaG93X2NhbGVuZGFyX29ubHlfdGhlbWVfbm90aWNlKCkge1xuXHRcdHZhciBwcmV2aWV3X21vZGUgPSAkKCAnI3dwYmNfdGhlbWVfcHJldmlld19tb2RlJyApLnZhbCgpIHx8ICdjYWxlbmRhcic7XG5cblx0XHRpZiAoICdjYWxlbmRhcicgIT09IHByZXZpZXdfbW9kZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRwdWxzZV9wcmV2aWV3X21vZGVfY29udHJvbCgpO1xuXHRcdHNob3dfaGlnaGxpZ2h0ZWRfbm90aWNlKFxuXHRcdFx0Y2ZnLmkxOG4gJiYgY2ZnLmkxOG4uY2FsZW5kYXJfb25seV90aGVtZV9ub3RpY2UgPyBjZmcuaTE4bi5jYWxlbmRhcl9vbmx5X3RoZW1lX25vdGljZSA6ICdQcmV2aWV3IGlzIHNldCB0byBDYWxlbmRhciBvbmx5LiBTd2l0Y2ggUHJldmlldyB0byBCb29raW5nIGZvcm0gdG8gaW5zcGVjdCB0aGUgZm9ybSB0aGVtZS4nLFxuXHRcdFx0J3dhcm5pbmcnLFxuXHRcdFx0OTAwMFxuXHRcdCk7XG5cdH1cblxuXHRmdW5jdGlvbiBzeW5jX3RpbWVfcGlja2VyX3ByZXZpZXcoKSB7XG5cdFx0dmFyIGlzX2VuYWJsZWQgPSBnZXRfZm9ybSgpLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfdGltZXNsb3RfcGlja2VyXCJdJyApLnByb3AoICdjaGVja2VkJyApO1xuXHRcdHZhciAkcHJldmlldyA9ICQoICdbZGF0YS13cGJjLXRoZW1lLXByZXZpZXc9XCIxXCJdJyApO1xuXHRcdHZhciB0aW1lX3NlbGVjdG9ycyA9ICdzZWxlY3RbbmFtZV49XCJyYW5nZXRpbWVcIl0sIHNlbGVjdFtuYW1lXj1cInN0YXJ0dGltZVwiXSwgc2VsZWN0W25hbWVePVwiZW5kdGltZVwiXSwgc2VsZWN0W25hbWVePVwiZHVyYXRpb250aW1lXCJdJztcblxuXHRcdGlmICggdy5fd3BiYyAmJiB0eXBlb2Ygdy5fd3BiYy5zZXRfb3RoZXJfcGFyYW0gPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHR3Ll93cGJjLnNldF9vdGhlcl9wYXJhbSggJ2lzX2VuYWJsZWRfYm9va2luZ190aW1lc2xvdF9waWNrZXInLCAhISBpc19lbmFibGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc19lbmFibGVkICkge1xuXHRcdFx0aWYgKCB3Ll93cGJjICYmIHR5cGVvZiB3LndwYmNfaG9va19faW5pdF90aW1lc2VsZWN0b3IgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHRcdHcud3BiY19ob29rX19pbml0X3RpbWVzZWxlY3RvcigpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdCRwcmV2aWV3LmZpbmQoICcud3BiY190aW1lc19zZWxlY3RvcicgKS5yZW1vdmUoKTtcblx0XHQkcHJldmlldy5maW5kKCB0aW1lX3NlbGVjdG9ycyApLnNob3coKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hfcHJldmlld19tb2RlX2NvbnRyb2xzKCkge1xuXHRcdHZhciBwcmV2aWV3X21vZGUgPSAkKCAnI3dwYmNfdGhlbWVfcHJldmlld19tb2RlJyApLnZhbCgpIHx8ICdjYWxlbmRhcic7XG5cdFx0JCggJ1tkYXRhLXdwYmMtdGhlbWUtZm9ybS1jb250cm9sPVwiMVwiXScgKS50b2dnbGVDbGFzcyggJ2lzLXZpc2libGUnLCAnZm9ybScgPT09IHByZXZpZXdfbW9kZSApO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2V0X2NhbGVuZGFyX2xvYWRpbmcoIGlzX2xvYWRpbmcgKSB7XG5cdFx0dmFyICRwYW5lbCA9ICQoICdbZGF0YS13cGJjLXRoZW1lLWNhbGVuZGFyLXBhbmVsPVwiMVwiXScgKTtcblxuXHRcdCRwYW5lbC50b2dnbGVDbGFzcyggJ2lzLWxvYWRpbmcnLCAhISBpc19sb2FkaW5nICk7XG5cdFx0JHBhbmVsLmZpbmQoICcud3BiY190aGVtZV9jYWxlbmRhcl9sb2FkaW5nJyApLnJlbW92ZSgpO1xuXG5cdFx0aWYgKCBpc19sb2FkaW5nICkge1xuXHRcdFx0JHBhbmVsLmFwcGVuZChcblx0XHRcdFx0JzxkaXYgY2xhc3M9XCJ3cGJjX2NhbGVuZGFyX2xvYWRpbmcgd3BiY190aGVtZV9jYWxlbmRhcl9sb2FkaW5nXCI+JyArXG5cdFx0XHRcdFx0JzxzcGFuIGNsYXNzPVwid3BiY19pY25fYXV0b3JlbmV3IHdwYmNfYW5pbWF0aW9uX3NwaW5cIj48L3NwYW4+Jm5ic3A7JyArXG5cdFx0XHRcdFx0dHJpbV90ZXh0KCBjZmcuaTE4biAmJiBjZmcuaTE4bi5sb2FkaW5nID8gY2ZnLmkxOG4ubG9hZGluZyA6ICdMb2FkaW5nJyApICtcblx0XHRcdFx0JzwvZGl2Pidcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaF9wcmV2aWV3KCkge1xuXHRcdHZhciBkYXRhID0gY29sbGVjdF9wYXlsb2FkKCk7XG5cblx0XHRpZiAoIHByZXZpZXdfYWpheCAmJiBwcmV2aWV3X2FqYXgucmVhZHlTdGF0ZSAhPT0gNCApIHtcblx0XHRcdHByZXZpZXdfYWpheC5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdGRhdGEuYWN0aW9uID0gY2ZnLnByZXZpZXdfYWN0aW9uO1xuXHRcdGRhdGEubm9uY2UgPSBjZmcubm9uY2U7XG5cblx0XHRzZXRfY2FsZW5kYXJfbG9hZGluZyggdHJ1ZSApO1xuXHRcdHByZXZpZXdfYWpheCA9ICQucG9zdCggY2ZnLmFqYXhfdXJsLCBkYXRhIClcblx0XHRcdC5kb25lKCBmdW5jdGlvbiAoIHJlc3BvbnNlICkge1xuXHRcdFx0XHRpZiAoIHJlc3BvbnNlICYmIHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmh0bWwgKSB7XG5cdFx0XHRcdFx0JCggJ1tkYXRhLXdwYmMtdGhlbWUtcHJldmlldz1cIjFcIl0nICkucmVwbGFjZVdpdGgoIHJlc3BvbnNlLmRhdGEuaHRtbCApO1xuXHRcdFx0XHRcdGlmICggcmVzcG9uc2UuZGF0YS5kYXlzX3NlbGVjdGlvbiApIHtcblx0XHRcdFx0XHRcdGNmZy5kYXlzX3NlbGVjdGlvbiA9IHJlc3BvbnNlLmRhdGEuZGF5c19zZWxlY3Rpb247XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFwcGx5X2Zvcm1fdGhlbWUoKTtcblx0XHRcdFx0XHRhcHBseV9jYWxlbmRhcl9za2luKCk7XG5cdFx0XHRcdFx0YXBwbHlfdGltZV9za2luKCk7XG5cdFx0XHRcdFx0ZW5zdXJlX2NhbGVuZGFyX29ubHlfZGF5c19zZWxlY3Rpb24oKTtcblx0XHRcdFx0XHRzeW5jX3RpbWVfcGlja2VyX3ByZXZpZXcoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzaG93X21lc3NhZ2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLm1lc3NhZ2UgPyByZXNwb25zZS5kYXRhLm1lc3NhZ2UgOiAoIGNmZy5pMThuICYmIGNmZy5pMThuLnByZXZpZXdfZmFpbGVkID8gY2ZnLmkxOG4ucHJldmlld19mYWlsZWQgOiAnVW5hYmxlIHRvIHJlZnJlc2ggY2FsZW5kYXIgcHJldmlldy4nICksXG5cdFx0XHRcdFx0J2Vycm9yJyxcblx0XHRcdFx0XHQxMDAwMFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApXG5cdFx0XHQuZmFpbCggZnVuY3Rpb24gKCB4aHIsIHRleHRfc3RhdHVzICkge1xuXHRcdFx0XHRpZiAoICdhYm9ydCcgPT09IHRleHRfc3RhdHVzICkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRzaG93X21lc3NhZ2UoIGNmZy5pMThuICYmIGNmZy5pMThuLnByZXZpZXdfZmFpbGVkID8gY2ZnLmkxOG4ucHJldmlld19mYWlsZWQgOiAnVW5hYmxlIHRvIHJlZnJlc2ggY2FsZW5kYXIgcHJldmlldy4nLCAnZXJyb3InLCAxMDAwMCApO1xuXHRcdFx0fSApXG5cdFx0XHQuYWx3YXlzKCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNldF9jYWxlbmRhcl9sb2FkaW5nKCBmYWxzZSApO1xuXHRcdFx0fSApO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2NoZWR1bGVfcHJldmlld19yZWZyZXNoKCkge1xuXHRcdGNsZWFyVGltZW91dCggcHJldmlld190aW1lciApO1xuXHRcdHByZXZpZXdfdGltZXIgPSBzZXRUaW1lb3V0KCByZWZyZXNoX3ByZXZpZXcsIDE4MCApO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2F2ZV9zZXR0aW5ncygpIHtcblx0XHR2YXIgJGJ1dHRvbiA9ICQoICdbZGF0YS13cGJjLXRoZW1lLXNhdmU9XCIxXCJdJyApO1xuXHRcdHZhciBvcmlnaW5hbF90ZXh0ID0gJGJ1dHRvbi5kYXRhKCAnd3BiYy1vcmlnaW5hbC10ZXh0JyApO1xuXHRcdHZhciBkYXRhID0gY29sbGVjdF9wYXlsb2FkKCk7XG5cblx0XHRpZiAoICEgb3JpZ2luYWxfdGV4dCApIHtcblx0XHRcdG9yaWdpbmFsX3RleHQgPSAkYnV0dG9uLmh0bWwoKTtcblx0XHRcdCRidXR0b24uZGF0YSggJ3dwYmMtb3JpZ2luYWwtdGV4dCcsIG9yaWdpbmFsX3RleHQgKTtcblx0XHR9XG5cblx0XHRkYXRhLmFjdGlvbiA9IGNmZy5hY3Rpb247XG5cdFx0ZGF0YS5ub25jZSA9IGNmZy5ub25jZTtcblxuXHRcdCRidXR0b24uYWRkQ2xhc3MoICdkaXNhYmxlZCcgKS5hdHRyKCAnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyApO1xuXHRcdCRidXR0b24uZmluZCggJy5pbi1idXR0b24tdGV4dCcgKS5odG1sKCAnJm5ic3A7Jm5ic3A7JyArIHRyaW1fdGV4dCggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4uc2F2aW5nID8gY2ZnLmkxOG4uc2F2aW5nIDogJ1NhdmluZycgKSArICcuLi4nICk7XG5cblx0XHQkLnBvc3QoIGNmZy5hamF4X3VybCwgZGF0YSApXG5cdFx0XHQuZG9uZSggZnVuY3Rpb24gKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCByZXNwb25zZSAmJiByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHNob3dfbWVzc2FnZSggcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLm1lc3NhZ2UgPyByZXNwb25zZS5kYXRhLm1lc3NhZ2UgOiAoIGNmZy5pMThuICYmIGNmZy5pMThuLnNhdmVkID8gY2ZnLmkxOG4uc2F2ZWQgOiAnU2F2ZWQnICksICdzdWNjZXNzJywgMzAwMCApO1xuXHRcdFx0XHRcdGNmZy5zZXR0aW5ncyA9IHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5zZXR0aW5ncyA/IHJlc3BvbnNlLmRhdGEuc2V0dGluZ3MgOiBjZmcuc2V0dGluZ3M7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2hvd19tZXNzYWdlKFxuXHRcdFx0XHRcdHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5tZXNzYWdlID8gcmVzcG9uc2UuZGF0YS5tZXNzYWdlIDogKCBjZmcuaTE4biAmJiBjZmcuaTE4bi5zYXZlX2ZhaWxlZCA/IGNmZy5pMThuLnNhdmVfZmFpbGVkIDogJ1VuYWJsZSB0byBzYXZlIGFwcGVhcmFuY2Ugc2V0dGluZ3MuJyApLFxuXHRcdFx0XHRcdCdlcnJvcicsXG5cdFx0XHRcdFx0MTAwMDBcblx0XHRcdFx0KTtcblx0XHRcdH0gKVxuXHRcdFx0LmZhaWwoIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2hvd19tZXNzYWdlKCBjZmcuaTE4biAmJiBjZmcuaTE4bi5zYXZlX2ZhaWxlZCA/IGNmZy5pMThuLnNhdmVfZmFpbGVkIDogJ1VuYWJsZSB0byBzYXZlIGFwcGVhcmFuY2Ugc2V0dGluZ3MuJywgJ2Vycm9yJywgMTAwMDAgKTtcblx0XHRcdH0gKVxuXHRcdFx0LmFsd2F5cyggZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQkYnV0dG9uLnJlbW92ZUNsYXNzKCAnZGlzYWJsZWQnICkucmVtb3ZlQXR0ciggJ2FyaWEtZGlzYWJsZWQnICkuaHRtbCggb3JpZ2luYWxfdGV4dCApO1xuXHRcdFx0fSApO1xuXHR9XG5cblx0ZnVuY3Rpb24gYmluZF9ldmVudHMoKSB7XG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy53cGJjX3RoZW1lX3JpZ2h0YmFyX3RhYnMgW3JvbGU9XCJ0YWJcIl0nLCBmdW5jdGlvbiAoIGV2ZW50ICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHN3aXRjaF9wYW5lbCggJCggdGhpcyApICk7XG5cdFx0fSApO1xuXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy53cGJjX3RoZW1lX3ByZW1pdW1fZGlzbWlzcyBhJywgZnVuY3Rpb24gKCBldmVudCApIHtcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH0gKTtcblxuXHRcdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcud3BiY190aGVtZV9yaWdodGJhcl9wYW5lbHMgLndwYmNfdWlfX2NvbGxhcHNpYmxlX2dyb3VwID4gLmdyb3VwX19oZWFkZXInLCBmdW5jdGlvbiAoIGV2ZW50ICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRvZ2dsZV9ncm91cCggJCggdGhpcyApICk7XG5cdFx0fSApO1xuXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJ1tkYXRhLXdwYmMtdGhlbWUtc2F2ZT1cIjFcIl0nLCBmdW5jdGlvbiAoIGV2ZW50ICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGlmICggISAkKCB0aGlzICkuaGFzQ2xhc3MoICdkaXNhYmxlZCcgKSApIHtcblx0XHRcdFx0c2F2ZV9zZXR0aW5ncygpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdCQoIGRvY3VtZW50ICkub24oICdzdWJtaXQnLCAnW2RhdGEtd3BiYy10aGVtZS1zZXR0aW5ncy1mb3JtPVwiMVwiXScsIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gKTtcblxuXHRcdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnW25hbWU9XCJib29raW5nX2Zvcm1fdGhlbWVcIl0nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRhcHBseV9mb3JtX3RoZW1lKCk7XG5cdFx0XHRhcHBseV9yZWxhdGVkX3NraW5zX2Zvcl90aGVtZSggJCggdGhpcyApLnZhbCgpIHx8ICcnICk7XG5cdFx0XHRzaG93X2NhbGVuZGFyX29ubHlfdGhlbWVfbm90aWNlKCk7XG5cdFx0fSApO1xuXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdbZGF0YS13cGJjLXRoZW1lLWNhbGVuZGFyLXNraW49XCIxXCJdJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0YXBwbHlfY2FsZW5kYXJfc2tpbigpO1xuXHRcdH0gKTtcblxuXHRcdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnW2RhdGEtd3BiYy10aGVtZS10aW1lLXNraW49XCIxXCJdJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0YXBwbHlfdGltZV9za2luKCk7XG5cdFx0fSApO1xuXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdbbmFtZT1cImJvb2tpbmdfdGltZXNsb3RfcGlja2VyXCJdJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0c3luY190aW1lX3BpY2tlcl9wcmV2aWV3KCk7XG5cdFx0XHRzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2goKTtcblx0XHR9ICk7XG5cblx0XHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ1tkYXRhLXdwYmMtdGhlbWUtcHJldmlldy1ub3RpY2VdJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0bWF5YmVfc2hvd19wcmV2aWV3X25vdGljZSggJCggdGhpcyApICk7XG5cdFx0fSApO1xuXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcjd3BiY190aGVtZV9yZXNvdXJjZV9pZCwgI3dwYmNfdGhlbWVfbW9udGhzX2NvdW50LCAjd3BiY190aGVtZV9jdXN0b21fZm9ybScsIGZ1bmN0aW9uICgpIHtcblx0XHRcdHNjaGVkdWxlX3ByZXZpZXdfcmVmcmVzaCgpO1xuXHRcdH0gKTtcblxuXHRcdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnI3dwYmNfdGhlbWVfcHJldmlld19tb2RlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVmcmVzaF9wcmV2aWV3X21vZGVfY29udHJvbHMoKTtcblx0XHRcdHNjaGVkdWxlX3ByZXZpZXdfcmVmcmVzaCgpO1xuXHRcdH0gKTtcblx0fVxuXG5cdCQoIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoICEgJCggJ1tkYXRhLXdwYmMtdGhlbWUtcGFnZT1cIjFcIl0nICkubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGJpbmRfZXZlbnRzKCk7XG5cdFx0cmVmcmVzaF9wcmV2aWV3X21vZGVfY29udHJvbHMoKTtcblx0XHRhcHBseV9mb3JtX3RoZW1lKCk7XG5cdFx0ZW5zdXJlX2NhbGVuZGFyX29ubHlfZGF5c19zZWxlY3Rpb24oKTtcblx0XHRzeW5jX3RpbWVfcGlja2VyX3ByZXZpZXcoKTtcblx0fSApO1xufSggalF1ZXJ5LCB3aW5kb3cgKSApO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNFLFdBQVdBLENBQUMsRUFBRUMsQ0FBQyxFQUFHO0VBQ25CLFlBQVk7O0VBRVosSUFBSUMsR0FBRyxHQUFHRCxDQUFDLENBQUNFLHlCQUF5QixJQUFJLENBQUMsQ0FBQztFQUMzQyxJQUFJQyxZQUFZLEdBQUcsSUFBSTtFQUN2QixJQUFJQyxhQUFhLEdBQUcsQ0FBQztFQUNyQixJQUFJQyxvQkFBb0IsR0FBRyxDQUFDO0VBQzVCLElBQUlDLDRCQUE0QixHQUFHLENBQUM7RUFFcEMsU0FBU0MsU0FBU0EsQ0FBRUMsS0FBSyxFQUFHO0lBQzNCLE9BQU9DLE1BQU0sQ0FBRUQsS0FBSyxJQUFJLEVBQUcsQ0FBQyxDQUFDRSxJQUFJLENBQUMsQ0FBQztFQUNwQztFQUVBLFNBQVNDLGNBQWNBLENBQUVDLElBQUksRUFBRztJQUMvQkEsSUFBSSxHQUFHSCxNQUFNLENBQUVHLElBQUksSUFBSSxFQUFHLENBQUM7SUFDM0IsSUFBSyxlQUFlLENBQUNDLElBQUksQ0FBRUQsSUFBSyxDQUFDLElBQUksT0FBTyxDQUFDQyxJQUFJLENBQUVELElBQUssQ0FBQyxFQUFHO01BQzNELE9BQU9BLElBQUk7SUFDWjtJQUNBLE9BQU9ILE1BQU0sQ0FBRVIsR0FBRyxDQUFDYSxVQUFVLElBQUksRUFBRyxDQUFDLENBQUNDLE9BQU8sQ0FBRSxLQUFLLEVBQUUsRUFBRyxDQUFDLEdBQUdILElBQUk7RUFDbEU7RUFFQSxTQUFTSSxZQUFZQSxDQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFHO0lBQzdDLElBQUssT0FBT25CLENBQUMsQ0FBQ29CLHVCQUF1QixLQUFLLFVBQVUsRUFBRztNQUN0RHBCLENBQUMsQ0FBQ29CLHVCQUF1QixDQUFFSCxPQUFPLEVBQUVDLElBQUksSUFBSSxNQUFNLEVBQUVDLEtBQUssSUFBSSxJ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
385