PageSourceSearch

https://svenner.no/wp-content/plugins/booking-calendar-com/inc/_bl/search/_out/search_avy_form.js?ver=11.0

js svenner.no collected 2026-10-02 21:35:44 UTC 93,902 bytes, 522 lines download raw bytes

1"use strict";
2
3/**
4 * Init Datepick in search form for Check In
5 */
6function wpbc_init_datepick__search_check_in() {
7  var datepick_params = {
8    onSelect: wpbc_search_check_in_selected,
9    beforeShowDay: wpbc_search_apply_css_before_show_check_in,
10    showOn: 'focus',
11    multiSelect: 0,
12    numberOfMonths: 1,
13    stepMonths: 1,
14    prevText: '‹',
15    nextText: '›',
16    dateFormat: _wpbc.get_other_param('search_avy__dates_format'),
17    changeMonth: false,
18    changeYear: false,
19    minDate: 0,
20    maxDate: _wpbc.get_other_param('calendars__max_monthes_in_calendar'),
21    //'1Y',
22    // minDate	  : new Date(2020, 2, 1), maxDate: new Date(2020, 9, 31),             	// Ability to set any  start and end date in calendar
23    showStatus: false,
24    multiSeparator: ', ',
25    closeAtTop: false,
26    firstDay: _wpbc.get_other_param('calendars__first_day'),
27    gotoCurrent: false,
28    hideIfNoPrevNext: true,
29    useThemeRoller: false,
30    mandatory: true,
31    _mainDivId: ['datepick-div', 'ui-datepicker-div', 'widget_wpdev_booking']
32  };
33  var search_check_in_date = '';
34  var url_params = location.href.split('?');
35  if (url_params.length > 1) {
36    url_params = url_params[1].split('&');
37    for (var i = 0; i < url_params.length; i++) {
38      var one_param = url_params[i].split('=');
39      if (one_param[0] === 'search_field__display_check_in' && '' === search_check_in_date) {
40        search_check_in_date = one_param[1];
41      }
42      if (one_param[0] === 'search_get__check_in_ymd') {
43        search_check_in_date = one_param[1];
44      }
45    }
46  }
47  if ('' !== search_check_in_date && '2100-01-01' !== search_check_in_date) {
48    datepick_params['defaultDate'] = jQuery.datepick.formatDate(_wpbc.get_other_param('search_avy__dates_format'), jQuery.datepick.parseDate('yy-mm-dd', search_check_in_date));
49    datepick_params['showDefault'] = true;
50  }
51  jQuery('#search_field__display_check_in').datepick(datepick_params);
52}
53
54/**
55 * Init Datepick in search form for Check Out
56 */
57function wpbc_init_datepick__search_check_out() {
58  var datepick_params = {
59    beforeShowDay: wpbc_search_apply_css_before_show_check_out,
60    showOn: 'focus',
61    multiSelect: 0,
62    numberOfMonths: 1,
63    stepMonths: 1,
64    prevText: '&lsaquo;',
65    nextText: '&rsaquo;',
66    dateFormat: _wpbc.get_other_param('search_avy__dates_format'),
67    changeMonth: false,
68    changeYear: false,
69    minDate: 0,
70    maxDate: _wpbc.get_other_param('calendars__max_monthes_in_calendar'),
71    //'1Y',
72    // minDate	  : new Date(2020, 2, 1), maxDate: new Date(2020, 9, 31),             	// Ability to set any  start and end date in calendar
73    showStatus: false,
74    multiSeparator: ', ',
75    closeAtTop: false,
76    firstDay: _wpbc.get_other_param('calendars__first_day'),
77    gotoCurrent: false,
78    hideIfNoPrevNext: true,
79    useThemeRoller: false,
80    mandatory: true,
81    _mainDivId: ['datepick-div', 'ui-datepicker-div', 'widget_wpdev_booking']
82  };
83  var search_check_out_date = '';
84  var url_params = location.href.split('?');
85  if (url_params.length > 1) {
86    url_params = url_params[1].split('&');
87    for (var i = 0; i < url_params.length; i++) {
88      var one_param = url_params[i].split('=');
89      if (one_param[0] === 'search_field__display_check_out' && '' === search_check_out_date) {
90        search_check_out_date = one_param[1];
91      }
92      if (one_param[0] === 'search_get__check_out_ymd') {
93        search_check_out_date = one_param[1];
94      }
95    }
96  }
97  if ('' !== search_check_out_date && '2100-01-01' !== search_check_out_date) {
98    datepick_params['defaultDate'] = jQuery.datepick.formatDate(_wpbc.get_other_param('search_avy__dates_format'), jQuery.datepick.parseDate('yy-mm-dd', search_check_out_date));
99    datepick_params['showDefault'] = true;
100  }
101  jQuery('#search_field__display_check_out').datepick(datepick_params);
102}
103
104/**
105 * Set-up 	available | unavailable 	dates in Check In calendar  in search  form
106 * @param date
107 * @returns {(boolean|string)[]}
108 */
109function wpbc_search_apply_css_before_show_check_in(date) {
110  var today_date = new Date(_wpbc.get_other_param('today_arr')[0], parseInt(_wpbc.get_other_param('today_arr')[1]) 
110- 1, _wpbc.get_other_param('today_arr')[2], 0, 0, 0); // Today JS_Date_Obj.
111  var class_day = wpbc__get__td_class_date(date); // '1-9-2023'
112
113  // Unavailable Weekdays
114  for (var i = 0; i < _wpbc.get_other_param('availability__week_days_unavailable').length; i++) {
115    if (date.getDay() == _wpbc.get_other_param('availability__week_days_unavailable')[i]) {
116      return [false, 'cal4date-' + class_day + ' date_user_unavailable'];
117    }
118  }
119  // Unavailable dates relative to  Today date
120  if (wpbc_dates__days_between(date, today_date) < parseInt(_wpbc.get_other_param('availability__unavailable_from_today')) || parseInt('0' + parseInt(_wpbc.get_other_param('availability__available_from_today'))) > 0 && wpbc_dates__days_between(date, today_date) > parseInt('0' + parseInt(_wpbc.get_other_param('availability__available_from_today')))) {
121    return [false, 'cal4date-' + class_day + ' date_user_unavailable'];
122  }
123
124  // Available
125  return [true, 'cal4date-' + class_day + ' date_available '];
126}
127
128/**
129 * After Check In day selected in Search Form
130 * @param date
131 */
132function wpbc_search_check_in_selected(date) {
133  // Parse a string value into a date object
134  var search_check_in_date = jQuery.datepick.parseDate(_wpbc.get_other_param('search_avy__dates_format'), jQuery('#search_field__display_check_in').val());
135  var date_to_check = new Date();
136  date_to_check.setFullYear(search_check_in_date.getFullYear(), search_check_in_date.getMonth(), search_check_in_date.getDate());
137  var startDay;
138  var string_date;
139  if ('fixed' == _wpbc.get_other_param('calendars__days_select_mode') && -1 != _wpbc.get_other_param('calendars__fixed__week_days__start')) {
140    startDay = wpbc_get_abs_closest_value_in_arr(date_to_check.getDay(), _wpbc.get_other_param('calendars__fixed__week_days__start'));
141    date_to_check.setDate(date_to_check.getDate() - (date_to_check.getDay() - startDay));
142    string_date = jQuery.datepick.formatDate(_wpbc.get_other_param('search_avy__dates_format'), date_to_check); // Format a date object into a string value.
143
144    jQuery('#search_field__display_check_in').val(string_date);
145  }
146  if (_wpbc.get_other_param('calendars__days_select_mode') == 'dynamic' && _wpbc.get_other_param('calendars__dynamic__week_days__start') != -1) {
147    startDay = wpbc_get_abs_closest_value_in_arr(date_to_check.getDay(), _wpbc.get_other_param('calendars__dynamic__week_days__start'));
148    date_to_check.setDate(date_to_check.getDate() - (date_to_check.getDay() - startDay));
149    string_date = jQuery.datepick.formatDate(_wpbc.get_other_param('search_avy__dates_format'), date_to_check); // Format a date object into a string value.
150    jQuery('#search_field__display_check_in').val(string_date);
151  }
152  if (document.getElementById('search_field__display_check_out') !== null) {
153    var start_bk_month_4_check_out = jQuery.datepick.parseDate(_wpbc.get_other_param('search_avy__dates_format'), jQuery('#search_field__display_check_in').val());
154    var myDate = new Date();
155    myDate.setFullYear(start_bk_month_4_check_out.getFullYear(), start_bk_month_4_check_out.getMonth(), start_bk_month_4_check_out.getDate());
156    var days_interval = wpbc_get_min_days_selection();
157    if (days_interval > 0) days_interval--;
158    myDate.setDate(myDate.getDate() + days_interval);
159    string_date = jQuery.datepick.formatDate(_wpbc.get_other_param('search_avy__dates_format'), myDate); // Format a date object into a string value.
160    jQuery('#search_field__display_check_out').val(string_date);
161
162    // Auto open Check Out calendar selection   																// FixIn: 10.0.0.39.
163    if ('On' === _wpbc.get_other_param('search_avy__auto_open_checkout')) {
164      setTimeout(function () {
165        jQuery('#search_field__display_check_out').trigger('focus');
166      }, 100);
167    }
168  }
169}
170
171/**
172 * Set-up 	available | unavailable 	dates in Check Out calendar  in search  form
173 * @param date
174 * @returns {(boolean|string)[]}
175 */
176function wpbc_search_apply_css_before_show_check_out(date) {
177  var today_date = new Date(_wpbc.get_other_param('today_arr')[0], parseInt(_wpbc.get_other_param('today_arr')[1]) 
177- 1, _wpbc.get_other_param('today_arr')[2], 0, 0, 0); // Today JS_Date_Obj.
178  var class_day = wpbc__get__td_class_date(date); // '1-9-2023'
179
180  // Unavailable Weekdays
181  for (var i = 0; i < _wpbc.get_other_param('availability__week_days_unavailable').length; i++) {
182    if (date.getDay() == _wpbc.get_other_param('availability__week_days_unavailable')[i]) {
183      return [false, 'cal4date-' + class_day + ' date_user_unavailable'];
184    }
185  }
186  // Unavailable dates relative to  Today date
187  if (wpbc_dates__days_between(date, today_date) < parseInt(_wpbc.get_other_param('availability__unavailable_from_today')) || parseInt('0' + parseInt(_wpbc.get_other_param('availability__available_from_today'))) > 0 && wpbc_dates__days_between(date, today_date) > parseInt('0' + parseInt(_wpbc.get_other_param('availability__available_from_today')))) {
188    return [false, 'cal4date-' + class_day + ' date_user_unavailable'];
189  }
190  // ---------------------
191
192  var additional_class = 'date_available ';
193  if (document.getElementById('search_field__display_check_in') != null && document.getElementById('search_field__display_check_in').value != '') {
194    // Parse a string value into a date object
195    var checkInDate = jQuery.datepick.parseDate(_wpbc.get_other_param('search_avy__dates_format'), jQuery('#search_field__display_check_in').val());
196    var days_interval = wpbc_get_min_days_selection();
197    if (days_interval > 0) days_interval--;
198    checkInDate.setDate(checkInDate.getDate() + days_interval);
199    var checkOutDate = jQuery.datepick.parseDate(_wpbc.get_other_param('search_avy__dates_format'), jQuery('#search_field__display_check_in').val());
200    var days_interval_max = wpbc_get_max_days_selection();
201    if (days_interval_max > 0) days_interval_max--;
202    checkOutDate.setDate(checkOutDate.getDate() + days_interval_max);
203    if (checkInDate <= date && checkOutDate >= date) {
204      return [true, 'cal4date-' + class_day + ' ' + additional_class + ' ']; // Available
205    } else {
206      return [false, 'cal4date-' + class_day + ' date_user_unavailable']; // return [false, ''];  // Unavailable
207    }
208  } else {
209    return [true, 'cal4date-' + class_day + ' ' + additional_class + ' ']; // Available
210  }
211}
212
213/**
214 * Get Minimum number of Days to Select from 	Settings General page
215 * @returns {number}
216 */
217function wpbc_get_min_days_selection() {
218  // FixIn: 8.6.1.21.
219
220  if ('dynamic' === _wpbc.get_other_param('calendars__days_select_mode')) {
221    return parseInt(_wpbc.get_other_param('calendars__dynamic__days_min'));
222  }
223  if ('fixed' === _wpbc.get_other_param('calendars__days_select_mode')) {
224    return parseInt(_wpbc.get_other_param('calendars__fixed__days_num'));
225  }
226  return 0;
227}
228
229/**
230 * Get Maximum number of Days to Select from 	Settings General page
231 * @returns {number}
232 */
233function wpbc_get_max_days_selection() {
234  // FixIn: 9.9.0.44.
235  if ('dynamic' === _wpbc.get_other_param('calendars__days_select_mode')) {
236    return parseInt(_wpbc.get_other_param('calendars__dynamic__days_max'));
237  }
238  if ('fixed' === _wpbc.get_other_param('calendars__days_select_mode')) {
239    return parseInt(_wpbc.get_other_param('calendars__fixed__days_num'));
240  }
241  return 365;
242}
243
244// =====================================================================================================================
245
246/**
247 * Select 'search_quantity' | 'location' | ... options and Search Filters (previously custom fields).
248 * Params in search form, after page loaded depends on GET params
249 */
250function wpbc_search_avy__auto_select_fields_in_search_form__if_params_in_url() {
251  var url_params = new URLSearchParams(window.location.search);
252  if (url_params.has('search_get__custom_params')) {
253    var search_get__custom_params = url_params.get('search_get__custom_params');
254
255    // Convert back.     Some systems do not like symbol '~' in URL, so  we need to replace to  some other symbols
256    search_get__custom_params = search_get__custom_params.replaceAll('_^_', '~');
257    var search_fields_arr = wpbc_auto_fill_search_fields__parse(search_get__custom_params);
258    for (let i = 0; i < search_fields_arr.length; i++) {
259      if (wpbc_in_array(['text', 'select-one', 'selectbox-one', 'select-multiple', 'selectbox-multiple', 'radio', 'checkbox'], search_fields_arr[i]['type']) && !wpbc_in_array(['search_field__display_check_in', 'search_field__display_check_out', /*'search_quantity',*/'search_field__extend_search_days'], search_fields_arr[i]['name'])) {
260        var cleaned_name = search_fields_arr[i]['name'];
261        var cleaned_value = search_fields_arr[i]['value'];
262        jQuery('[name="' + cleaned_name + '"]').val(cleaned_value).trigger('change');
263      }
264    }
265  }
266  url_params.forEach((value, key) => {
267    if (key.startsWith('booking_')) {
268      jQuery('[name="' + key + '"]').val(value).trigger('change');
269    }
270  });
271}
272
273/** Icons Trigger to open calendars, if clicked on Calendar Icons */
274jQuery('.wpbc_icn_check_in').on('click', function (event) {
275  jQuery('#search_field__display_check_in').trigger('focus');
276});
277jQuery('.wpbc_icn_check_out').on('click', function (event) {
278  jQuery('#search_field__display_check_out').trigger('focus');
279});
280
281/**
282 *  Disable search button
283 */
284function wpbc_search_form__disable_submit_button() {
285  // FixIn: 9.9.0.45.
286  // jQuery( '#booking_search_form .search_booking' ).prop( 'disabled', true );
287  jQuery('#booking_search_form .search_booking').attr('saved-button-color', jQuery('#booking_search_form .search_booking').css('color'));
288  jQuery('#booking_search_form .search_booking').css('color', '#ccc');
289  jQuery('#booking_search_form .search_booking').css('cursor', 'not-allowed');
290}
291
292/**
293 * Enable search button
294 */
295function wpbc_search_form__enable_submit_button() {
296  // FixIn: 9.9.0.45.
297  jQuery('#booking_search_form .search_booking').prop('disabled', false);
298  if (undefined != jQuery('#booking_search_form .search_booking').attr('saved-button-color')) {
299    // FixIn: 9.5.1.2.
300    jQuery('#booking_search_form .search_booking').css('color', jQuery('#booking_search_form .search_booking').attr('saved-button-color'));
301  }
302  jQuery('#booking_search_form .search_booking').css('cursor', 'pointer');
303}
304
305/**
306 * Get as String the all Values from HTML Search Form fields. 		E.g.: 'select^search_quantity^2~....'
307 *
308 * @param search_form		- HTML Dom Form element: this.form
309 * @returns {string}		- 'select^search_quantity^2~....'
310 */
311function wpbc_search_form__get_all_input_fields_data(search_form) {
312  // FixIn: 7.1.2.9.
313
314  var all_paramas = '';
315  var inp_el;
316  var inp_val;
317  for (var i = 0; i < search_form.length; i++) {
318    if (search_form[i].type == 'checkbox' && !search_form[i].checked) {
319      continue;
320    }
321    inp_el = search_form[i].type + "^" + search_form[i].name + "^";
322    inp_val = jQuery(search_form[i]).val();
323    if (Array.isArray(inp_val)) {
324      jQuery.each(inp_val, function (index) {
325        all_paramas += inp_el + inp_val[index] + "~";
326      });
327    } else {
328      all_paramas += inp_el + inp_val + "~";
329    }
330  }
331  return all_paramas;
332}
333
334/**
335 * Get Date value Parsed from  Search Date format  to  '2024-05-06' format
336 *
337 * @param html_id		'#search_field__display_check_in' | '#search_field__display_check_out'
338 */
339function wpbc_search_form__get_parsed_search_date__as_ymd(html_id) {
340  var booking_search_date = '';
341  if (jQuery(html_id).length) {
342    booking_search_date = jQuery(html_id).val();
343  }
344
345  // Set JS  date to  some Future date,  that will be available for sure
346  var search_js_date = new Date('2100-01-01');
347
348  // Parse a string value into a date object
349  if ('' !== booking_search_date) {
350    search_js_date = jQuery.datepick.parseDate(_wpbc.get_other_param('search_avy__dates_format'), booking_search_date);
351
352    // Format a date object into a string value.
353    var search_string_date = jQuery.datepick.formatDate('yy-mm-dd', search_js_date);
354    return search_string_date;
355  } else {
356    return '2100-01-01'; // FixIn: 10.2.2.1.
357  }
358}
359
360// ---------------------------------------------------------------------------------------------------------------------
361// Search Submit  -  New Page
362// ---------------------------------------------------------------------------------------------------------------------
363
364/**
365 * Prepare for submit Search Form  to New Page
366 *
367 * @param search_form			HTML Dom  form:  this.form
368 * @param wpdbc_active_locale	string locale: 	'es_ES'
369 * @returns {boolean}
370 */
371function wpbc_search_form_click_new_page(search_form, wpdbc_active_locale) {
372  // FixIn: 8.6.1.21.
373
374  if ('Off' != _wpbc.get_other_param('search_avy__warning__dates_required_enabled')) {
375    if ('' == jQuery('#search_field__display_check_in').val() || '' == jQuery('#search_field__display_check_out').val()) {
376      alert(_wpbc.get_other_param('search_avy__warning__dates_required_warning'));
377      return false;
378    }
379  }
380  wpbc_search_form__disable_submit_button();
381
382  // -------------------------------------------------------------------------------------------------------------
383  // Get Search Fields:
384  // -------------------------------------------------------------------------------------------------------------
385  var param__check_in_ymd = wpbc_search_form__get_parsed_search_date__as_ymd('#search_field__display_check_in'); // FixIn: 9.5.3.4.
386  jQuery('[name="search_get__check_in_ymd"]').val(param__check_in_ymd); // in format  2024-05-06
387  // -------------------------------------------------------------------------------------------------------------
388  var param__check_out_ymd = wpbc_search_form__get_parsed_search_date__as_ymd('#search_field__display_check_out');
389  jQuery('[name="search_get__check_out_ymd"]').val(param__check_out_ymd); // in format  2024-05-06
390  // -------------------------------------------------------------------------------------------------------------
391  var param__search_quantity = jQuery("[name='search_quantity']").length > 0 ? jQuery("[name='search_quantity']").val() : 1;
392  jQuery('[name="search_get__quantity"]').val(param__search_quantity);
393  var param__search_time = jQuery("[name='search_time']").length > 0 ? jQuery("[name='search_time']").val() : '';
394  jQuery('[name="search_get__time"]').val(param__search_time);
395  // -------------------------------------------------------------------------------------------------------------
396  var param__users_id = jQuery('#search_field__users_id').length ? jQuery('#search_field__users_id').val() : '';
397  jQuery('[name="search_get__users_id"]').val(param__users_id);
398  // -------------------------------------------------------------------------------------------------------------
399  var param__extended_days = jQuery("input[name='search_field__extend_search_days']:checked").length > 0 ? jQuery("input[name='search_field__extend_search_days']").val() : 0;
400  jQuery('[name="search_get__extend"]').val(param__extended_days);
401  // -------------------------------------------------------------------------------------------------------------
402  // Get as String the all Values from HTML Search Form fields. 		E.g.: 'select^search_quantity^2~....'
403  var param__all_as_str = wpbc_search_form__get_all_input_fields_data(search_form);
404  param__all_as_str = param__all_as_str.replaceAll('~', '_^_'); // Some systems do not like symbol '~' in URL, so  we need to replace to  some other symbols
405
406  jQuery('[name="search_get__custom_params"]').val(param__all_as_str); // in format  'select^search_quantity^2~....'
407  // -------------------------------------------------------------------------------------------------------------
408
409  return true;
410}
411
412// -------------------------------------------------------------------------------------------------------------
413// Search Submit  -  Ajax
414// -------------------------------------------------------------------------------------------------------------
415
416/**
417 * Submit Search Ajax request,  and show Loading spinner
418 *
419 * @param search_form           DOM Form -> this.form
420 * @param wpdev_active_locale   Locale   -> 'es_ES'
421 */
422function wpbc_search_form_click_ajax(search_form, wpdev_active_locale) {
423  if ('Off' != _wpbc.get_other_param('search_avy__warning__dates_required_enabled')) {
424    if ('' === jQuery('#search_field__display_check_in').val() || '' === jQuery('#search_field__display_check_out').val()) {
425      alert(_wpbc.get_other_param('search_avy__warning__dates_required_warning'));
426      return false;
427    }
428  }
429
430  // ---------------------------------------------------------------------
431  // Show Loading Spinner
432  // ---------------------------------------------------------------------
433  //// :: Old ::
434  //document.getElementById('booking_search_results' ).innerHTML = '<div style="height:20px;width:100%;text-align:center;margin:15px auto;"><img  style="vertical-align:middle;box-shadow:none;width:14px;" src="'+_wpbc.get_other_param( 'url_plugin' )+'/assets/img/ajax-loader.gif"><//div>';
435  ////:: Big Loading Circle ::
436  //jQuery( '#booking_search_results' ).html( '<div class="wpbc_booking_form_spin_loader" style="position: relative;margin-top: 70px;"><div class="wpbc_spins_loader_wrapper"><div class="wpbc_spins_loader"></div></div></div>' );
437
438  ////:: Mini Loading Circle ::       // FixIn: 10.0.0.38.
439  jQuery('#booking_search_results').html('<div class="wpbc_booking_form_spin_loader" style="position: relative;margin-top: 50px;"><div class="wpbc_spins_loader_wrapper"><div class="wpbc_spin_loader_one_new"></div></div></div>');
440  wpbc_ajax_search_submit(search_form, wpdev_active_locale);
441}
442
443/**
444 * Send Ajax Search Availability Request
445 *
446 * @param search_form			HTML Dom  form:  this.form
447 * @param wpdbc_active_locale	string locale: 	'es_ES'
448 */
449function wpbc_ajax_search_submit(search_form, wpdbc_active_locale) {
450  // FixIn: 6.0.1.1.
451
452  // Disable Submit button
453  wpbc_search_form__disable_submit_button(); // FixIn: 9.9.0.45.
454  jQuery('#booking_search_form .search_booking').prop('disabled', true);
455
456  // Clear search results
457  jQuery('.booking_search_ajax_container').remove();
458
459  // -------------------------------------------------------------------------------------------------------------
460  // Get Search Fields:
461  // -------------------------------------------------------------------------------------------------------------
462
463  // Get as String the all Values from HTML Search Form fields. 		E.g.: 'select^search_quantity^2~....'
464  var param__all_as_str = wpbc_search_form__get_all_input_fields_data(search_form);
465  var param__check_in_ymd = wpbc_search_form__get_parsed_search_date__as_ymd('#search_field__display_check_in'); // FixIn: 8.6.1.21.
466  var param__check_out_ymd = wpbc_search_form__get_parsed_search_date__as_ymd('#search_field__display_check_out');
467  var param__users_id = jQuery('#search_field__users_id').length ? jQuery('#search_field__users_id').val() : '';
468  var param__extended_days = jQuery("input[name='search_field__extend_search_days']:checked").length > 0 ? jQuery("input[name='search_field__extend_search_days']").val() : 0;
469  var param__search_quantity = jQuery("[name='search_quantity']").length > 0 ? jQuery("[name='search_quantity']").val() : 1;
470  var param__search_time = jQuery("[name='search_time']").length > 0 ? jQuery("[name='search_time']").val() : '';
471  // -------------------------------------------------------------------------------------------------------------
472  jQuery.ajax({
473    url: wpbc_url_ajax,
474    type: 'POST',
475    success: function (data, textStatus) {
476      if (textStatus == 'success') {
477        if ('undefined' !== typeof data && 'undefined' !== typeof data.ajx_data_search_content) {
478          jQuery('#booking_search_results').html(data.ajx_data_search_content); // '<div class="wpbc_booking_form_spin_loader"
479          // jQuery( '#booking_search_ajax' ).html( data.ajx_data_search_content );
480          // jQuery( "#booking_search_ajax" ).after( jQuery( "#booking_search_ajax .booking_search_ajax_container" ) );
481          // jQuery( "#booking_search_ajax" ).hide();
482        } else {
483          console.log(' :: SEARCH RESPONSE ERROR :: ', data);
484          var jq_node = jQuery('#booking_search_results');
485          // Show Message
486          wpbc_front_end__show_message(' :: SEARCH RESPONSE ERROR :: <br>' + JSON.stringify(data).replace(/\n/g, "<br />"), {
487            'type': 'warning',
488            'show_here': {
489              'jq_node': jq_node,
490              'where': 'after'
491            },
492            'is_append': true,
493            'style': 'text-align:left;',
494            'delay': 30000
495          });
496          jQuery('#booking_search_results .wpbc_booking_form_spin_loader').remove();
497        }
498        wpbc_search_form__enable_submit_button();
499      }
500    },
501    error: function (XMLHttpRequest, textStatus, errorThrown) {
502      console.log('WPBC Error :: Ajax search Error status:' + textStatus, XMLHttpRequest);
503      alert(XMLHttpRequest.status + ' ' + XMLHttpRequest.statusText);
504      if (XMLHttpRequest.status == 500) {
505        alert('Please check at this page according this error:' + ' https://wpbookingcalendar.com/faq/#ajax-sending-error');
506      }
507    },
508    data: {
509      action: 'BOOKING_SEARCH',
510      search_ajx__check_in_ymd: param__check_in_ymd,
511      search_ajx__check_out_ymd: param__check_out_ymd,
512      search_ajx__quantity: param__search_quantity,
513      search_ajx__time: param__search_time,
514      search_ajx__custom_params: param__all_as_str,
515      search_ajx__extend: param__extended_days,
516      search_ajx__users_id: param__users_id,
517      wpdev_active_locale: wpdbc_active_locale,
518      wpbc_nonce: document.getElementById('wpbc_search_nonce').value
519    }
520  });
521}
522//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jL19ibC9zZWFyY2gvX291dC9zZWFyY2hfYXZ5X2Zvcm0uanMiLCJuYW1lcyI6WyJ3cGJjX2luaXRfZGF0ZXBpY2tfX3NlYXJjaF9jaGVja19pbiIsImRhdGVwaWNrX3BhcmFtcyIsIm9uU2VsZWN0Iiwid3BiY19zZWFyY2hfY2hlY2tfaW5fc2VsZWN0ZWQiLCJiZWZvcmVTaG93RGF5Iiwid3BiY19zZWFyY2hfYXBwbHlfY3NzX2JlZm9yZV9zaG93X2NoZWNrX2luIiwic2hvd09uIiwibXVsdGlTZWxlY3QiLCJudW1iZXJPZk1vbnRocyIsInN0ZXBNb250aHMiLCJwcmV2VGV4dCIsIm5leHRUZXh0IiwiZGF0ZUZvcm1hdCIsIl93cGJjIiwiZ2V0X290aGVyX3BhcmFtIiwiY2hhbmdlTW9udGgiLCJjaGFuZ2VZZWFyIiwibWluRGF0ZSIsIm1heERhdGUiLCJzaG93U3RhdHVzIiwibXVsdGlTZXBhcmF0b3IiLCJjbG9zZUF0VG9wIiwiZmlyc3REYXkiLCJnb3RvQ3VycmVudCIsImhpZGVJZk5vUHJldk5leHQiLCJ1c2VUaGVtZVJvbGxlciIsIm1hbmRhdG9yeSIsIl9tYWluRGl2SWQiLCJzZWFyY2hfY2hlY2tfaW5fZGF0ZSIsInVybF9wYXJhbXMiLCJsb2NhdGlvbiIsImhyZWYiLCJzcGxpdCIsImxlbmd0aCIsImkiLCJvbmVfcGFyYW0iLCJqUXVlcnkiLCJkYXRlcGljayIsImZvcm1hdERhdGUiLCJwYXJzZURhdGUiLCJ3cGJjX2luaXRfZGF0ZXBpY2tfX3NlYXJjaF9jaGVja19vdXQiLCJ3cGJjX3NlYXJjaF9hcHBseV9jc3NfYmVmb3JlX3Nob3dfY2hlY2tfb3V0Iiwic2VhcmNoX2NoZWNrX291dF9kYXRlIiwiZGF0ZSIsInRvZGF5X2RhdGUiLCJEYXRlIiwicGFyc2VJbnQiLCJjbGFzc19kYXkiLCJ3cGJjX19nZXRfX3RkX2NsYXNzX2RhdGUiLCJnZXREYXkiLCJ3cGJjX2RhdGVzX19kYXlzX2JldHdlZW4iLCJ2YWwiLCJkYXRlX3RvX2NoZWNrIiwic2V0RnVsbFllYXIiLCJ
522nZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInN0YXJ0RGF5Iiwic3RyaW5nX2RhdGUiLCJ3cGJjX2dldF9hYnNfY2xvc2VzdF92YWx1ZV9pbl9hcnIiLCJzZXREYXRlIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInN0YXJ0X2JrX21vbnRoXzRfY2hlY2tfb3V0IiwibXlEYXRlIiwiZGF5c19pbnRlcnZhbCIsIndwYmNfZ2V0X21pbl9kYXlzX3NlbGVjdGlvbiIsInNldFRpbWVvdXQiLCJ0cmlnZ2VyIiwiYWRkaXRpb25hbF9jbGFzcyIsInZhbHVlIiwiY2hlY2tJbkRhdGUiLCJjaGVja091dERhdGUiLCJkYXlzX2ludGVydmFsX21heCIsIndwYmNfZ2V0X21heF9kYXlzX3NlbGVjdGlvbiIsIndwYmNfc2VhcmNoX2F2eV9fYXV0b19zZWxlY3RfZmllbGRzX2luX3NlYXJjaF9mb3JtX19pZl9wYXJhbXNfaW5fdXJsIiwiVVJMU2VhcmNoUGFyYW1zIiwid2luZG93Iiwic2VhcmNoIiwiaGFzIiwic2VhcmNoX2dldF9fY3VzdG9tX3BhcmFtcyIsImdldCIsInJlcGxhY2VBbGwiLCJzZWFyY2hfZmllbGRzX2FyciIsIndwYmNfYXV0b19maWxsX3NlYXJjaF9maWVsZHNfX3BhcnNlIiwid3BiY19pbl9hcnJheSIsImNsZWFuZWRfbmFtZSIsImNsZWFuZWRfdmFsdWUiLCJmb3JFYWNoIiwia2V5Iiwic3RhcnRzV2l0aCIsIm9uIiwiZXZlbnQiLCJ3cGJjX3NlYXJjaF9mb3JtX19kaXNhYmxlX3N1Ym1pdF9idXR0b24iLCJhdHRyIiwiY3NzIiwid3BiY19zZWFyY2hfZm9ybV9fZW5hYmxlX3N1Ym1pdF9idXR0b24iLCJwcm9wIiwidW5kZWZpbmVkIiwid3BiY19zZWFyY2hfZm9ybV9fZ2V0X2FsbF9pbnB1dF9maWVsZHNfZGF0YSIsInNlYXJjaF9mb3JtIiwiYWxsX3BhcmFtYXMiLCJpbnBfZWwiLCJpbnBfdmFsIiwidHlwZSIsImNoZWNrZWQiLCJuYW1lIiwiQXJyYXkiLCJpc0FycmF5IiwiZWFjaCIsImluZGV4Iiwid3BiY19zZWFyY2hfZm9ybV9fZ2V0X3BhcnNlZF9zZWFyY2hfZGF0ZV9fYXNfeW1kIiwiaHRtbF9pZCIsImJvb2tpbmdfc2VhcmNoX2RhdGUiLCJzZWFyY2hfanNfZGF0ZSIsInNlYXJjaF9zdHJpbmdfZGF0ZSIsIndwYmNfc2VhcmNoX2Zvcm1fY2xpY2tfbmV3X3BhZ2UiLCJ3cGRiY19hY3RpdmVfbG9jYWxlIiwiYWxlcnQiLCJwYXJhbV9fY2hlY2tfaW5feW1kIiwicGFyYW1fX2NoZWNrX291dF95bWQiLCJwYXJhbV9fc2VhcmNoX3F1YW50aXR5IiwicGFyYW1fX3NlYXJjaF90aW1lIiwicGFyYW1fX3VzZXJzX2lkIiwicGFyYW1fX2V4dGVuZGVkX2RheXMiLCJwYXJhbV9fYWxsX2FzX3N0ciIsIndwYmNfc2VhcmNoX2Zvcm1fY2xpY2tfYWpheCIsIndwZGV2X2FjdGl2ZV9sb2NhbGUiLCJodG1sIiwid3BiY19hamF4X3NlYXJjaF9zdWJtaXQiLCJyZW1vdmUiLCJhamF4IiwidXJsIiwid3BiY191cmxfYWpheCIsInN1Y2Nlc3MiLCJkYXRhIiwidGV4dFN0YXR1cyIsImFqeF9kYXRhX3NlYXJjaF9jb250ZW50IiwiY29uc29sZSIsImxvZyIsImpxX25vZGUiLCJ3cGJjX2Zyb250X2VuZF9fc2hvd19tZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJlcnJvciIsIlhNTEh0dHBSZXF1
522ZXN0IiwiZXJyb3JUaHJvd24iLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiYWN0aW9uIiwic2VhcmNoX2FqeF9fY2hlY2tfaW5feW1kIiwic2VhcmNoX2FqeF9fY2hlY2tfb3V0X3ltZCIsInNlYXJjaF9hanhfX3F1YW50aXR5Iiwic2VhcmNoX2FqeF9fdGltZSIsInNlYXJjaF9hanhfX2N1c3RvbV9wYXJhbXMiLCJzZWFyY2hfYWp4X19leHRlbmQiLCJzZWFyY2hfYWp4X191c2Vyc19pZCIsIndwYmNfbm9uY2UiXSwic291cmNlcyI6WyJpbmMvX2JsL3NlYXJjaC9fc3JjL3NlYXJjaF9hdnlfZm9ybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogSW5pdCBEYXRlcGljayBpbiBzZWFyY2ggZm9ybSBmb3IgQ2hlY2sgSW5cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfaW5pdF9kYXRlcGlja19fc2VhcmNoX2NoZWNrX2luKCl7XHJcblxyXG5cdHZhciBkYXRlcGlja19wYXJhbXMgPSB7XHJcblx0XHRvblNlbGVjdCAgICAgIDogd3BiY19zZWFyY2hfY2hlY2tfaW5fc2VsZWN0ZWQsXHJcblx0XHRiZWZvcmVTaG93RGF5IDogd3BiY19zZWFyY2hfYXBwbHlfY3NzX2JlZm9yZV9zaG93X2NoZWNrX2luLFxyXG5cdFx0c2hvd09uICAgICAgICA6ICdmb2N1cycsXHJcblx0XHRtdWx0aVNlbGVjdCAgIDogMCxcclxuXHRcdG51bWJlck9mTW9udGhzOiAxLFxyXG5cdFx0c3RlcE1vbnRocyAgICA6IDEsXHJcblx0XHRwcmV2VGV4dCAgICAgIDogJyZsc2FxdW87JyxcclxuXHRcdG5leHRUZXh0ICAgICAgOiAnJnJzYXF1bzsnLFxyXG5cdFx0ZGF0ZUZvcm1hdCAgICA6IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3NlYXJjaF9hdnlfX2RhdGVzX2Zvcm1hdCcgKSxcclxuXHRcdGNoYW5nZU1vbnRoICAgOiBmYWxzZSxcclxuXHRcdGNoYW5nZVllYXIgICAgOiBmYWxzZSxcclxuXHRcdG1pbkRhdGUgICAgICAgOiAwLFxyXG5cdFx0bWF4RGF0ZSAgICAgICA6IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ2NhbGVuZGFyc19fbWF4X21vbnRoZXNfaW5fY2FsZW5kYXInICksIFx0XHQvLycxWScsXHJcblx0XHQvLyBtaW5EYXRlXHQgIDogbmV3IERhdGUoMjAyMCwgMiwgMSksIG1heERhdGU6IG5ldyBEYXRlKDIwMjAsIDksIDMxKSwgICAgICAgICAgICAgXHQvLyBBYmlsaXR5IHRvIHNldCBhbnkgIHN0YXJ0IGFuZCBlbmQgZGF0ZSBpbiBjYWxlbmRhclxyXG5cdFx0c2hvd1N0YXR1cyAgICAgIDogZmFsc2UsXHJcblx0XHRtdWx0aVNlcGFyYXRvciAgOiAnLCAnLFxyXG5cdFx0Y2xvc2VBdFRvcCAgICAgIDogZmFsc2UsXHJcblx0XHRmaXJzdERheSAgICAgICAgOiBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdjYWxlbmRhcnNfX2ZpcnN0X2RheScgKSxcclxuXHRcdGdvdG9DdXJyZW50ICAgICA6IGZhbHNlLFxyXG5cdFx0aGlkZUlmTm9QcmV2TmV4dDogdHJ1ZSxcclxuXHRcdHVzZVRoZW1lUm9sbGVyICA6IGZhbHNlLFxyXG5cdFx0bWFuZGF0b3J5ICAgICAgIDogdHJ1ZSxcclxuXHRcdF9tYWluRGl2SWQgICAgICA6IFsnZGF0ZXBpY2stZGl2JywgJ3VpLWRhdGVwaWNrZXItZGl2JywgJ3dpZGdldF93cGRldl9ib29raW5nJ11cclxuXHR9O1xyXG5cclxuXHR2YXIgc2VhcmNoX2NoZWNrX2luX2RhdGUgPSAnJztcclxuXHJcblx0dmFyIHVybF9wYXJhbXMgPSBsb2NhdGlvbi5ocmVmLnNwbGl0KCAnPycgKTtcclxuXHRpZiAoIHVybF9wYXJhbXMubGVuZ3RoID4gMSApe1xyXG5cdFx0dXJsX3BhcmFtcyA9IHVybF9wYXJhbXNbIDEgXS5zcGxpdCggJyYnICk7XHJcblx0XHRmb3IgKCB2YXIgaSA9IDA7IGkgPCB1cmxfcGFyYW1zLmxlbmd0aDsgaSsrICl7XHJcblx0XHRcdHZhciBvbmVfcGFyYW0gPSB1cmxfcGFyYW1zWyBpIF0uc3BsaXQoICc9JyApO1xyXG5cdFx0XHRpZiAoIChvbmVfcGFyYW1bIDAgXSA9PT0gJ3NlYXJjaF9maWVsZF9fZGlzcGxheV9jaGVja19pbicpICYmICgnJyA9PT0gc2VhcmNoX2NoZWNrX2luX2RhdGUpICl7XHJcblx0XHRcdFx0c2VhcmNoX2NoZWNrX2luX2RhdGUgPSBvbmVfcGFyYW1bIDEgXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIG9uZV9wYXJhbVsgMCBdID09PSAnc2VhcmNoX2dldF9fY2hlY2tfaW5feW1kJyApe1xyXG5cdFx0XHRcdHNlYXJjaF9jaGVja19pbl9kYXRlID0gb25lX3BhcmFtWyAxIF07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKCAoJycgIT09IHNlYXJjaF9jaGVja19pbl9kYXRlKSAmJiAoJzIxMDAtMDEtMDEnICE9PSBzZWFyY2hfY2hlY2tfaW5fZGF0ZSkgKXtcclxuXHRcdGRhdGVwaWNrX3BhcmFtc1sgJ2RlZmF1bHREYXRlJyBdID0galF1ZXJ5LmRhdGVwaWNrLmZvcm1hdERhdGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3NlYXJjaF9hdnlfX2RhdGVzX2Zvcm1hdCcgKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBcdGpRdWVyeS5kYXRlcGljay5wYXJzZURhdGUoICd5eS1tbS1kZCcsIHNlYXJjaF9jaGVja19pbl9kYXRlIClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRkYXRlcGlja19wYXJhbXNbICdzaG93RGVmYXVsdCcgXSA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRqUXVlcnkoICcjc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX2luJyApLmRhdGVwaWNrKCBkYXRlcGlja19wYXJhbXMgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEluaXQgRGF0ZXBpY2sgaW4gc2VhcmNoIGZvcm0gZm9yIENoZWNrIE91dFxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19pbml0X2RhdGVwaWNrX19zZWFyY2hfY2hlY2tfb3V0KCl7XHJcblxyXG5cdHZhciBkYXRlcGlja19wYXJhbXMgPSB7XHJcblx0XHRiZWZvcmVTaG93RGF5IDogd3BiY19zZWFyY2hfYXBwbHlfY3NzX2JlZm9yZV9zaG93X2NoZWNrX291dCxcclxuXHRcdHNob3dPbiAgICAgICAgOiAnZm9jdXMnLFxyXG5cdFx0bXVsdGlTZWxlY3QgICA6IDAsXHJcblx0XHRudW1iZXJPZk1vbnRoczogMSxcclxuXHRcdHN0ZXBNb250aHMgICAgOiAxLFxyXG5cdFx0cHJldlRleHQgICAgICA6ICcmbHNhcXVvOycsXHJcblx0XHRuZXh0VGV4dCAgICAgIDogJyZyc2FxdW87JyxcclxuXHRcdGRhdGVGb3JtYXQgICAgOiBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdzZWFyY2hfYXZ5X19kYXRlc19mb3JtYXQnICksXHJcblx0XHRjaGFuZ2VNb250aCAgIDogZmFsc2UsXHJcblx0XHRjaGFuZ2VZZWFyICAgIDogZmFsc2UsXHJcblx0XHRtaW5EYXRlICAgICAgIDogMCxcclxuXHRcdG1heERhdGUgICAgICAgOiBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdjYWxlbmRhcnNfX21heF9tb250aGVzX2luX2NhbGVuZGFyJyApLCBcdFx0Ly8nMVknLFxyXG5cdFx0Ly8gbWluRGF0ZVx0ICA6IG5ldyBEYXRlKDIwMjAsIDIsIDEpLCBtYXhEYXRlOiBuZXcgRGF0ZSgyMDIwLCA5LCAzMSksICAgICAgICAgICAgIFx0Ly8gQWJpbGl0eSB0byBzZXQgYW55ICBzdGFydCBhbmQgZW5kIGRhdGUgaW4gY2FsZW5kYXJcclxuXHRcdHNob3dTdGF0dXMgICAgICA6IGZhbHNlLFxyXG5cdFx0bXVsdGlTZXBhcmF0b3IgIDogJywgJyxcclxuXHRcdGNsb3NlQXRUb3AgICAgICA6IGZhbHNlLFxyXG5cdFx0Zmlyc3REYXkgICAgICAgIDogX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnY2FsZW5kYXJzX19maXJzdF9kYXknICksXHJcblx0XHRnb3RvQ3VycmVudCAgICAgOiBmYWxzZSxcclxuXHRcdGhpZGVJZk5vUHJldk5leHQ6IHRydWUsXHJcblx0XHR1c2VUaGVtZVJvbGxlciAgOiBmYWxzZSxcclxuXHRcdG1hbmRhdG9yeSAgICAgICA6IHRydWUsXHJcblx0XHRfbWFpbkRpdklkICAgICAgOiBbJ2RhdGVwaWNrLWRpdicsICd1aS1kYXRlcGlja2VyLWRpdicsICd3aWRnZXRfd3BkZXZfYm9va2luZyddXHJcblx0fTtcclxuXHJcblx0dmFyIHNlYXJjaF9jaGVja19vdXRfZGF0ZSA9ICcnO1xyXG5cclxuXHR2YXIgdXJsX3BhcmFtcyA9IGxvY2F0aW9uLmhy
522ZWYuc3BsaXQoICc/JyApO1xyXG5cdGlmICggdXJsX3BhcmFtcy5sZW5ndGggPiAxICl7XHJcblx0XHR1cmxfcGFyYW1zID0gdXJsX3BhcmFtc1sgMSBdLnNwbGl0KCAnJicgKTtcclxuXHRcdGZvciAoIHZhciBpID0gMDsgaSA8IHVybF9wYXJhbXMubGVuZ3RoOyBpKysgKXtcclxuXHRcdFx0dmFyIG9uZV9wYXJhbSA9IHVybF9wYXJhbXNbIGkgXS5zcGxpdCggJz0nICk7XHJcblx0XHRcdGlmICggKG9uZV9wYXJhbVsgMCBdID09PSAnc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX291dCcpICYmICgnJyA9PT0gc2VhcmNoX2NoZWNrX291dF9kYXRlKSApe1xyXG5cdFx0XHRcdHNlYXJjaF9jaGVja19vdXRfZGF0ZSA9IG9uZV9wYXJhbVsgMSBdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggb25lX3BhcmFtWyAwIF0gPT09ICdzZWFyY2hfZ2V0X19jaGVja19vdXRfeW1kJyApe1xyXG5cdFx0XHRcdHNlYXJjaF9jaGVja19vdXRfZGF0ZSA9IG9uZV9wYXJhbVsgMSBdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdGlmICggKCcnICE9PSBzZWFyY2hfY2hlY2tfb3V0X2RhdGUpICYmICgnMjEwMC0wMS0wMScgIT09IHNlYXJjaF9jaGVja19vdXRfZGF0ZSkgKXtcclxuXHRcdGRhdGVwaWNrX3BhcmFtc1sgJ2RlZmF1bHREYXRlJyBdID0galF1ZXJ5LmRhdGVwaWNrLmZvcm1hdERhdGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3NlYXJjaF9hdnlfX2RhdGVzX2Zvcm1hdCcgKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBcdGpRdWVyeS5kYXRlcGljay5wYXJzZURhdGUoICd5eS1tbS1kZCcsIHNlYXJjaF9jaGVja19vdXRfZGF0ZSApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0ZGF0ZXBpY2tfcGFyYW1zWyAnc2hvd0RlZmF1bHQnIF0gPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0alF1ZXJ5KCAnI3NlYXJjaF9maWVsZF9fZGlzcGxheV9jaGVja19vdXQnICkuZGF0ZXBpY2soIGRhdGVwaWNrX3BhcmFtcyApO1xyXG59XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldC11cCBcdGF2YWlsYWJsZSB8IHVuYXZhaWxhYmxlIFx0ZGF0ZXMgaW4gQ2hlY2sgSW4gY2FsZW5kYXIgIGluIHNlYXJjaCAgZm9ybVxyXG5cdCAqIEBwYXJhbSBkYXRlXHJcblx0ICogQHJldHVybnMgeyhib29sZWFufHN0cmluZylbXX1cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX3NlYXJjaF9hcHBseV9jc3NfYmVmb3JlX3Nob3dfY2hlY2tfaW4oIGRhdGUgKXtcclxuXHJcblx0XHR2YXIgdG9kYXlfZGF0ZSA9IG5ldyBEYXRlKCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0b2RheV9hcnInIClbIDAgXSwgKHBhcnNlSW50KCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0b2RheV9hcnInIClbIDEgXSApIC0gMSksIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RvZGF5X2FycicgKVsgMiBdLCAwLCAwLCAwICk7XHRcdFx0XHRcdFx0XHRcdC8vIFRvZGF5IEpTX0RhdGVfT2JqLlxyXG5cdFx0dmFyIGNsYXNzX2RheSA9IHdwYmNfX2dldF9fdGRfY2xhc3NfZGF0ZSggZGF0ZSApO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBcdC8vICcxLTktMjAyMydcclxuXHJcblx0XHQvLyBVbmF2YWlsYWJsZSBXZWVrZGF5c1xyXG5cdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnYXZhaWxhYmlsaXR5X193ZWVrX2RheXNfdW5hdmFpbGFibGUnICkubGVuZ3RoOyBpKysgKXtcclxuXHRcdFx0aWYgKCBkYXRlLmdldERheSgpID09IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ2F2YWlsYWJpbGl0eV9fd2Vla19kYXlzX3VuYXZhaWxhYmxlJyApWyBpIF0gKXtcclxuXHRcdFx0XHRyZXR1cm4gW2ZhbHNlLCAnY2FsNGRhdGUtJyArIGNsYXNzX2RheSArICcgZGF0ZV91c2VyX3VuYXZhaWxhYmxlJ107XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIFVuYXZhaWxhYmxlIGRhdGVzIHJlbGF0aXZlIHRvICBUb2RheSBkYXRlXHJcblx0XHRpZiAoXHJcblx0XHRcdCAgICggd3BiY19kYXRlc19fZGF5c19iZXR3ZWVuKCBkYXRlLCB0b2RheV9kYXRlICkgPCBwYXJzZUludCggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnYXZhaWxhYmlsaXR5X191bmF2YWlsYWJsZV9mcm9tX3RvZGF5JyApICkpXHJcblx0XHRcdHx8IChcclxuXHRcdFx0XHQgICAoIHBhcnNlSW50KCAnMCcgKyBwYXJzZUludCggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnYXZhaWxhYmlsaXR5X19hdmFpbGFibGVfZnJvbV90b2RheScgKSApICkgPiAwIClcclxuXHRcdFx0XHQmJiAoIHdwYmNfZGF0ZXNfX2RheXNfYmV0d2VlbiggZGF0ZSwgdG9kYXlfZGF0ZSApID4gcGFyc2VJbnQoICcwJyArIHBhcnNlSW50KCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdhdmFpbGFiaWxpdHlfX2F2YWlsYWJsZV9mcm9tX3RvZGF5JyApICkgKSApXHJcblx0XHRcdClcclxuXHRcdCl7XHJcblx0XHRcdHJldHVybiBbZmFsc2UsICdjYWw0ZGF0ZS0nICsgY2xhc3NfZGF5ICsgJyBkYXRlX3VzZXJfdW5hdmFpbGFibGUnXTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBdmFpbGFibGVcclxuXHRcdHJldHVybiBbdHJ1ZSwgJ2NhbDRkYXRlLScgKyBjbGFzc19kYXkgKyAnIGRhdGVfYXZhaWxhYmxlICddO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWZ0ZXIgQ2hlY2sgSW4gZGF5IHNlbGVjdGVkIGluIFNlYXJjaCBGb3JtXHJcblx0ICogQHBhcmFtIGRhdGVcclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX3NlYXJjaF9jaGVja19pbl9zZWxlY3RlZCggZGF0ZSApIHtcclxuXHJcbiAgICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUgaW50byBhIGRhdGUgb2JqZWN0XHJcbiAgICAgICAgdmFyIHNlYXJjaF9jaGVja19pbl9kYXRlID0galF1ZXJ5LmRhdGVwaWNrLnBhcnNlRGF0ZSggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnc2VhcmNoX2F2eV9fZGF0ZXNfZm9ybWF0JyApICwgalF1ZXJ5KCAnI3NlYXJjaF9maWVsZF9fZGlzcGxheV9jaGVja19pbicgKS52YWwoKSApO1xyXG5cclxuICAgICAgICB2Y
522XIgZGF0ZV90b19jaGVjayA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgZGF0ZV90b19jaGVjay5zZXRGdWxsWWVhciggc2VhcmNoX2NoZWNrX2luX2RhdGUuZ2V0RnVsbFllYXIoKSwgc2VhcmNoX2NoZWNrX2luX2RhdGUuZ2V0TW9udGgoKSwgc2VhcmNoX2NoZWNrX2luX2RhdGUuZ2V0RGF0ZSgpICk7XHJcblxyXG5cdFx0dmFyIHN0YXJ0RGF5O1xyXG5cdFx0dmFyIHN0cmluZ19kYXRlO1xyXG5cclxuICAgICAgICBpZiAoXHJcblx0XHRcdCAgICggJ2ZpeGVkJyA9PSBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdjYWxlbmRhcnNfX2RheXNfc2VsZWN0X21vZGUnICkgKVxyXG5cdFx0XHQmJiAoICAgICAgLTEgIT0gX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnY2FsZW5kYXJzX19maXhlZF9fd2Vla19kYXlzX19zdGFydCcgKSApXHJcblx0XHQpe1xyXG5cclxuICAgICAgICAgICAgc3RhcnREYXkgPSB3cGJjX2dldF9hYnNfY2xvc2VzdF92YWx1ZV9pbl9hcnIoIGRhdGVfdG9fY2hlY2suZ2V0RGF5KCksIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ2NhbGVuZGFyc19fZml4ZWRfX3dlZWtfZGF5c19fc3RhcnQnICkgKTtcclxuICAgICAgICAgICAgZGF0ZV90b19jaGVjay5zZXREYXRlKCBkYXRlX3RvX2NoZWNrLmdldERhdGUoKSAtIChkYXRlX3RvX2NoZWNrLmdldERheSgpIC0gc3RhcnREYXkpICk7XHJcblxyXG4gICAgICAgICAgICBzdHJpbmdfZGF0ZSA9IGpRdWVyeS5kYXRlcGljay5mb3JtYXREYXRlKCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdzZWFyY2hfYXZ5X19kYXRlc19mb3JtYXQnICksIGRhdGVfdG9fY2hlY2sgKTsgICAgICAgIC8vIEZvcm1hdCBhIGRhdGUgb2JqZWN0IGludG8gYSBzdHJpbmcgdmFsdWUuXHJcblxyXG4gICAgICAgICAgICBqUXVlcnkoICcjc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX2luJyApLnZhbCggc3RyaW5nX2RhdGUgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCAgKCAgX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnY2FsZW5kYXJzX19kYXlzX3NlbGVjdF9tb2RlJyApID09ICdkeW5hbWljJyApICYmICggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnY2FsZW5kYXJzX19keW5hbWljX193ZWVrX2RheXNfX3N0YXJ0JyApICE9IC0xICkgICl7XHJcblxyXG4gICAgICAgICAgICBzdGFydERheSA9IHdwYmNfZ2V0X2Fic19jbG9zZXN0X3ZhbHVlX2luX2FyciggZGF0ZV90b19jaGVjay5nZXREYXkoKSwgX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnY2FsZW5kYXJzX19keW5hbWljX193ZWVrX2RheXNfX3N0YXJ0JyApICk7XHJcbiAgICAgICAgICAgIGRhdGVfdG9fY2hlY2suc2V0RGF0ZSggZGF0ZV90b19jaGVjay5nZXREYXRlKCkgLSAoZGF0ZV90b19jaGVjay5nZXREYXkoKSAtIHN0YXJ0RGF5KSApO1xyXG5cclxuICAgICAgICAgICAgc3RyaW5nX2RhdGUgPSBqUXVlcnkuZGF0ZXBpY2suZm9ybWF0RGF0ZSggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnc2VhcmNoX2F2eV9fZGF0ZXNfZm9ybWF0JyApLCBkYXRlX3RvX2NoZWNrICk7ICAgICAgICAvLyBGb3JtYXQgYSBkYXRlIG9iamVjdCBpbnRvIGEgc3RyaW5nIHZhbHVlLlxyXG4gICAgICAgICAgICBqUXVlcnkoICcjc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX2luJyApLnZhbCggc3RyaW5nX2RhdGUgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdzZWFyY2hfZmllbGRfX2Rpc3BsYXlfY2hlY2tfb3V0JyApICE9PSBudWxsICl7XHJcblxyXG4gICAgICAgICAgICB2Y
522XIgc3RhcnRfYmtfbW9udGhfNF9jaGVja19vdXQgPSBqUXVlcnkuZGF0ZXBpY2sucGFyc2VEYXRlKCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdzZWFyY2hfYXZ5X19kYXRlc19mb3JtYXQnICksIGpRdWVyeSggJyNzZWFyY2hfZmllbGRfX2Rpc3BsYXlfY2hlY2tfaW4nICkudmFsKCkgKTtcclxuICAgICAgICAgICAgdmFyIG15RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIG15RGF0ZS5zZXRGdWxsWWVhciggc3RhcnRfYmtfbW9udGhfNF9jaGVja19vdXQuZ2V0RnVsbFllYXIoKSwgc3RhcnRfYmtfbW9udGhfNF9jaGVja19vdXQuZ2V0TW9udGgoKSwgc3RhcnRfYmtfbW9udGhfNF9jaGVja19vdXQuZ2V0RGF0ZSgpICk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZGF5c19pbnRlcnZhbCA9IHdwYmNfZ2V0X21pbl9kYXlzX3NlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICBpZiAoIGRheXNfaW50ZXJ2YWwgPiAwICkgZGF5c19pbnRlcnZhbC0tO1xyXG4gICAgICAgICAgICBteURhdGUuc2V0RGF0ZSggbXlEYXRlLmdldERhdGUoKSArIGRheXNfaW50ZXJ2YWwgKTtcclxuXHJcbiAgICAgICAgICAgIHN0cmluZ19kYXRlID0galF1ZXJ5LmRhdGVwaWNrLmZvcm1hdERhdGUoIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3NlYXJjaF9hdnlfX2RhdGVzX2Zvcm1hdCcgKSwgbXlEYXRlICk7ICAgICAgICAvLyBGb3JtYXQgYSBkYXRlIG9iamVjdCBpbnRvIGEgc3RyaW5nIHZhbHVlLlxyXG4gICAgICAgICAgICBqUXVlcnkoICcjc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX291dCcgKS52YWwoIHN0cmluZ19kYXRlICk7XHJcblxyXG4gICAgICAgICAgICAvLyBBdXRvIG9wZW4gQ2hlY2sgT3V0IGNhbGVuZGFyIHNlbGVjdGlvbiAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRml4SW46IDEwLjAuMC4zOS5cclxuICAgICAgICAgICAgaWYgKCAnT24nID09PSBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdzZWFyY2hfYXZ5X19hdXRvX29wZW5fY2hlY2tvdXQnICkgKXtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoICcjc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX291dCcgKS50cmlnZ2VyKCAnZm9jdXMnICk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQtdXAgXHRhdmFpbGFibGUgfCB1bmF2YWlsYWJsZSBcdGRhdGVzIGluIENoZWNrIE91dCBjYWxlbmRhciAgaW4gc2VhcmNoICBmb3JtXHJcblx0ICogQHBhcmFtIGRhdGVcclxuXHQgKiBAcmV0dXJucyB7KGJvb2xlYW58c3RyaW5nKVtdfVxyXG5cdCAqL1xyXG4gICAgZnVuY3Rpb24gd3BiY19zZWFyY2hfYXBwbHlfY3NzX2JlZm9yZV9zaG93X2NoZWNrX291dChkYXRlKXtcclxuXHJcblx0XHR2YXIgdG9kYXlfZGF0ZSA9IG5ldyBEYXRlKCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0b2RheV9hcnInIClbIDAgXSwgKHBhcnNlSW50KCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICd0b2RheV9hcnInIClbIDEgXSApIC0gMSksIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3RvZGF5X2FycicgKVsgMiBdLCAwLCAwLCAwICk7XHRcdFx0XHRcdFx0XHRcdC8vIFRvZGF5IEpTX0RhdGVfT2JqLlxyXG5cdFx0dmFyIGNsYXNzX2RheSA9IHdwYmNfX2dldF9fdGRfY2xhc3NfZGF0ZSggZGF0ZSApO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBcdC8vICcxLTktMjAyMydcclxuXHJcblx0XHQvLyBVbmF2YWlsYWJsZSBXZWVrZGF5c1xyXG5cdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnYXZhaWxhYmlsaXR5X193ZWVrX2RheXNfdW5hdmFpbGFibGUnICkubGVuZ3RoOyBpKysgKXtcclxuXHRcdFx0aWYgKCBkYXRlLmdldERheSgpID09IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ2F2YWlsYWJpbGl0eV9fd2Vla19kYXlzX3VuYXZhaWxhYmxlJyApWyBpIF0gKXtcclxuXHRcdFx0XHRyZXR1cm4gW2ZhbHNlLCAnY2FsNGRhdGUtJyArIGNsYXNzX2RheSArICcgZGF0ZV91c2VyX3VuYXZhaWxhYmxlJ107XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIFVuYXZhaWxhYmxlIGRhdGVzIHJlbGF0aXZlIHRvICBUb2RheSBkYXRlXHJcblx0XHRpZiAoXHJcblx0XHRcdCAgICggd3BiY19kYXRlc19fZGF5c19iZXR3ZWVuKCBkYXRlLCB0b2RheV9kYXRlICkgPCBwYXJzZUludCggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnYXZhaWxhYmlsaXR5X191bmF2YWlsYWJsZV9mcm9tX3RvZGF5JyApICkpXHJcblx0XHRcdHx8IChcclxuXHRcdFx0XHQgICAoIHBhcnNlSW50KCAnMCcgKyBwYXJzZUludCggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnYXZhaWxhYmlsaXR5X19hdmFpbGFibGVfZnJvbV90b2RheScgKSApICkgPiAwIClcclxuXHRcdFx0XHQmJiAoIHdwYmNfZGF0ZXNfX2RheXNfYmV0d2VlbiggZGF0ZSwgdG9kYXlfZGF0ZSApID4gcGFyc2VJbnQoICcwJyArIHBhcnNlSW50KCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdhdmFpbGFiaWxpdHlfX2F2YWlsYWJsZV9mcm9tX3RvZGF5JyApICkgKSApXHJcblx0XHRcdClcclxuXHRcdCl7XHJcblx0XHRcdHJldHVybiBbZmFsc2UsICdjYWw0ZGF0ZS0nICsgY2xhc3NfZGF5ICsgJyBkYXRlX3VzZXJfdW5hdmFpbGFibGUnXTtcclxuXHRcdH1cclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRcdHZhciBhZGRpdGlvbmFsX2NsYXNzID0gJ2RhdGVfYXZhaWxhYmxlICc7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX2luJyApICE9IG51bGwgKVxyXG4gICAgICAgICAgICAmJiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX2luJyApLnZhbHVlICE9ICcnIClcclxuICAgICAgICApe1xyXG5cclxuXHRcdFx0Ly8gUGFyc2UgYSBzdHJpbmcgdmFsdWUgaW50byBhIGRhdGUgb2JqZWN0XHJcblx0XHRcdHZhciBjaGVja0luRGF0ZSA9IGpRdWVyeS5kYXRlcGljay5wYXJzZURhdGUoIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3NlYXJjaF9hdnlfX2RhdGVzX2Zvcm1hdCcgKSwgalF1ZXJ5KCAnI3NlYXJjaF9maWVsZF9fZGlzcGxheV9jaGVja19pbicgKS52YWwoKSApO1xyXG5cclxuXHRcdFx0dmFyIGRheXNfaW50ZXJ2YWwgPSB3cGJjX2dldF9taW5fZGF5c19zZWxlY3Rpb24oKTtcclxuXHRcdFx0aWYgKCBkYXlzX2ludGVydmFsID4gMCApIGRheXNfaW50ZXJ2YWwtLTtcclxuXHRcdFx0Y2hlY2tJbkRhdGUuc2V0RGF0ZSggY2hlY2tJbkRhdGUuZ2V0RGF0ZSgpICsgZGF5c19pbnRlcnZhbCApO1xyXG5cclxuXHRcdFx0dmFyIGNoZWNrT3V0RGF0ZSA9IGpRdWVyeS5kYXRlcGljay5wYXJzZURhdGUoIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3NlYXJjaF9hdnlfX2RhdGVzX2Zvcm1hdCcgKSwgalF1ZXJ5KCAnI3NlYXJjaF9maWVsZF9fZGlzcGxheV9jaGVja19pbicgKS52YWwoKSApO1xyXG5cdFx0XHR2YXIgZGF5c19pbnRlcnZhbF9tYXggPSB3cGJjX2dldF9tYXhfZGF5c19zZWxlY3Rpb24oKTtcclxuXHRcdFx0aWYgKCBkYXlzX2ludGVydmFsX21heCA+IDAgKSBkYXlzX2ludGVydmFsX21heC0tO1xyXG5cdFx0XHRjaGVja091dERhdGUuc2V0RGF0ZSggY2hlY2tPdXREYXRlLmdldERhdGUoKSArIGRheXNfaW50ZXJ2YWxfbWF4ICk7XHJcblxyXG5cdFx0XHRpZiAoIChjaGVja0luRGF0ZSA8PSBkYXRlKSAmJiAoY2hlY2tPdXREYXRlID49IGRhdGUpICl7XHJcblx0XHRcdFx0cmV0dXJuIFt0cnVlLCAnY2FsNGRhdGUtJyArIGNsYXNzX2RheSArICcgJyArIGFkZGl0aW9uYWxfY2xhc3MgKyAnICddOyAvLyBBdmFpbGFibGVcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4gW2ZhbHNlLCAnY2FsNGRhdGUtJyArIGNsYXNzX2RheSArICcgZGF0ZV91c2VyX3VuYXZhaWxhYmxlJ107XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyByZXR1cm4gW2ZhbHNlLCAnJ107ICAvLyBVbmF2YWlsYWJsZVxyXG5cdFx0XHR9XHJcblxyXG4gICAgICAgI
522H0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgJ2NhbDRkYXRlLScgKyBjbGFzc19kYXkgKyAnICcgKyBhZGRpdGlvbmFsX2NsYXNzICsgJyAnXTsgICAgICAvLyBBdmFpbGFibGVcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBHZXQgTWluaW11bSBudW1iZXIgb2YgRGF5cyB0byBTZWxlY3QgZnJvbSBcdFNldHRpbmdzIEdlbmVyYWwgcGFnZVxyXG5cdFx0ICogQHJldHVybnMge251bWJlcn1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gd3BiY19nZXRfbWluX2RheXNfc2VsZWN0aW9uKCl7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaXhJbjogOC42LjEuMjEuXHJcblxyXG5cdFx0XHRpZiAoICdkeW5hbWljJyA9PT0gX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnY2FsZW5kYXJzX19kYXlzX3NlbGVjdF9tb2RlJyApICl7XHJcblx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdjYWxlbmRhcnNfX2R5bmFtaWNfX2RheXNfbWluJyApICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCAnZml4ZWQnID09PSBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdjYWxlbmRhcnNfX2RheXNfc2VsZWN0X21vZGUnICkgKXtcclxuXHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ2NhbGVuZGFyc19fZml4ZWRfX2RheXNfbnVtJyApICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBHZXQgTWF4aW11bSBudW1iZXIgb2YgRGF5cyB0byBTZWxlY3QgZnJvbSBcdFNldHRpbmdzIEdlbmVyYWwgcGFnZVxyXG5cdFx0ICogQHJldHVybnMge251bWJlcn1cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gd3BiY19nZXRfbWF4X2RheXNfc2VsZWN0aW9uKCl7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaXhJbjogOS45LjAuNDQuXHJcblx0XHRcdGlmICggJ2R5bmFtaWMnID09PSBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdjYWxlbmRhcnNfX2RheXNfc2VsZWN0X21vZGUnICkgKXtcclxuXHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ2NhbGVuZGFyc19fZHluYW1pY19fZGF5c19tYXgnICkgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoICdmaXhlZCcgPT09IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ2NhbGVuZGFyc19fZGF5c19zZWxlY3RfbW9kZScgKSApe1xyXG5cdFx0XHRcdHJldHVybiBwYXJzZUludCggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnY2FsZW5kYXJzX19maXhlZF9fZGF5c19udW0nICkgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gMzY1O1xyXG5cdFx0fVxyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4vKipcclxuICogU2VsZWN0ICdzZWFyY2hfcXVhbnRpdHknIHwgJ2xvY2F0aW9uJyB8IC4uLiBvcHRpb25zIGFuZCBTZWFyY2ggRmlsdGVycyAocHJldmlvdXNseSBjdXN0b20gZmllbGRzKS5cclxuICogUGFyYW1zIGluIHNlYXJjaCBmb3JtLCBhZnRlciBwYWdlIGxvYWRlZCBkZXBlbmRzIG9uIEdFVCBwYXJhbXNcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfc2VhcmNoX2F2eV9fYXV0b19zZWxlY3RfZmllbGRzX2luX3NlYXJjaF9mb3JtX19pZl9wYXJhbXNfaW5fdXJsKCl7XHJcblxyXG5cdHZhciB1cmxfcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyggd2luZG93LmxvY2F0aW9uLnNlYXJjaCApO1xyXG5cclxuXHRpZiAoXHJcblx0XHQoIHVybF9wYXJhbXMuaGFzKCAnc2VhcmNoX2dldF9fY3VzdG9tX3BhcmFtcycgKSApXHJcblx0KXtcclxuXHJcblx0XHR2YXIgc2VhcmNoX2dldF9fY3VzdG9tX3BhcmFtcyA9ICB1cmxfcGFyYW1zLmdldCggJ3NlYXJjaF9nZXRfX2N1c3RvbV9wYXJhbXMnICk7XHJcblxyXG5cdFx0Ly8gQ29udmVydCBiYWNrLiAgICAgU29tZSBzeXN0ZW1zIGRvIG5vdCBsaWtlIHN5bWJvbCAnficgaW4gVVJMLCBzbyAgd2UgbmVlZCB0byByZXBsYWNlIHRvICBzb21lIG90aGVyIHN5bWJvbHNcclxuXHRcdHNlYXJjaF9nZXRfX2N1c3RvbV9wYXJhbXMgPSBzZWFyY2hfZ2V0X19jdXN0b21fcGFyYW1zLnJlcGxhY2VBbGwoICdfXl8nLCAnficgKTtcclxuXHJcblx0XHR2YXIgc2VhcmNoX2ZpZWxkc19hcnIgPSB3cGJjX2F1dG9fZmlsbF9zZWFyY2hfZmllbGRzX19wYXJzZSggc2VhcmNoX2dldF9fY3VzdG9tX3BhcmFtcyApXHJcblxyXG5cdFx0Zm9yICggbGV0IGkgPSAwOyBpIDwgc2VhcmNoX2ZpZWxkc19hcnIubGVuZ3RoOyBpKysgKXtcclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRcdCAgIHdwYmNfaW5fYXJyYXkoIFsndGV4dCcsICdzZWxlY3Qtb25lJywnc2VsZWN0Ym94LW9uZScsICdzZWxlY3QtbXVsdGlwbGUnLCdzZWxlY3Rib3gtbXVsdGlwbGUnLCAncmFkaW8nLCAnY2hlY2tib3gnXSAgLCBzZWFyY2hfZmllbGRzX2FyclsgaSBdWyAndHlwZScgXSApXHJcblx0XHRcdFx0JiYgKCAhIHdwYmNfaW5fYXJyYXkoIFsnc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX2luJywgJ3NlYXJjaF9maWVsZF9fZGlzcGxheV9jaGVja19vdXQnLCAvKidzZWFyY2hfcXVhbnRpdHknLCovICdzZWFyY2hfZmllbGRfX2V4dGVuZF9zZWFyY2hfZGF5cycgXSAsIHNlYXJjaF9maWVsZHNfYXJyWyBpIF1bJ25hbWUnXSApIClcclxuXHRcdFx0KXtcclxuXHRcdFx0XHR2YXIgY2xlYW5lZF9uYW1lICA9ICBzZWFyY2hfZmllbGRzX2FyclsgaSBdWyduYW1lJ10gIDtcclxuXHRcdFx0XHR2YXIgY2xlYW5lZF92YWx1ZSA9ICBzZWFyY2hfZmllbGRzX2FyclsgaSBdWyd2YWx1ZSddIDtcclxuXHJcblx0XHRcdFx0alF1ZXJ5KCAnW25hbWU9XCInICsgY2xlYW5lZF9uYW1lICsgJ1wiXScgKS52YWwoIGNsZWFuZWRfdmFsdWUgKS50cmlnZ2VyKCAnY2hhbmdlJyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR1cmxfcGFyYW1zLmZvckVhY2goICggdmFsdWUsIGtleSApID0+IHtcclxuXHRcdGlmICgga2V5LnN0YXJ0c1dpdGgoICdib29raW5nXycgKSApe1xyXG5cdFx0XHRqUXVlcnkoICdbbmFtZT1cIicgKyBrZXkgKyAnXCJdJyApLnZhbCggdmFsdWUgKS50cmlnZ2VyKCAnY2hhbmdlJyApO1xyXG5cdFx0fVxyXG5cdH0gKTtcclxufVxyXG5cclxuLyoqIEl
522jb25zIFRyaWdnZXIgdG8gb3BlbiBjYWxlbmRhcnMsIGlmIGNsaWNrZWQgb24gQ2FsZW5kYXIgSWNvbnMgKi9cclxualF1ZXJ5KCAnLndwYmNfaWNuX2NoZWNrX2luJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbiAoIGV2ZW50ICl7XHJcblx0alF1ZXJ5KCAnI3NlYXJjaF9maWVsZF9fZGlzcGxheV9jaGVja19pbicgKS50cmlnZ2VyKCAnZm9jdXMnICk7XHJcbn0pO1xyXG5qUXVlcnkoICcud3BiY19pY25fY2hlY2tfb3V0JyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbiAoIGV2ZW50ICl7XHJcblx0alF1ZXJ5KCAnI3NlYXJjaF9maWVsZF9fZGlzcGxheV9jaGVja19vdXQnICkudHJpZ2dlciggJ2ZvY3VzJyApO1xyXG59KTtcclxuXHJcblxyXG4vKipcclxuICogIERpc2FibGUgc2VhcmNoIGJ1dHRvblxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19zZWFyY2hfZm9ybV9fZGlzYWJsZV9zdWJtaXRfYnV0dG9uKCl7XHJcblxyXG5cdC8vIEZpeEluOiA5LjkuMC40NS5cclxuXHQvLyBqUXVlcnkoICcjYm9va2luZ19zZWFyY2hfZm9ybSAuc2VhcmNoX2Jvb2tpbmcnICkucHJvcCggJ2Rpc2FibGVkJywgdHJ1ZSApO1xyXG5cdGpRdWVyeSggJyNib29raW5nX3NlYXJjaF9mb3JtIC5zZWFyY2hfYm9va2luZycgKS5hdHRyKCAnc2F2ZWQtYnV0dG9uLWNvbG9yJywgalF1ZXJ5KCAnI2Jvb2tpbmdfc2VhcmNoX2Zvcm0gLnNlYXJjaF9ib29raW5nJyApLmNzcyggJ2NvbG9yJyApICk7XHJcblx0alF1ZXJ5KCAnI2Jvb2tpbmdfc2VhcmNoX2Zvcm0gLnNlYXJjaF9ib29raW5nJyApLmNzcyggJ2NvbG9yJywgJyNjY2MnICk7XHJcblx0alF1ZXJ5KCAnI2Jvb2tpbmdfc2VhcmNoX2Zvcm0gLnNlYXJjaF9ib29raW5nJyApLmNzcyggJ2N1cnNvcicsICdub3QtYWxsb3dlZCcgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEVuYWJsZSBzZWFyY2ggYnV0dG9uXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX3NlYXJjaF9mb3JtX19lbmFibGVfc3VibWl0X2J1dHRvbigpe1xyXG5cclxuXHQvLyBGaXhJbjogOS45LjAuNDUuXHJcblx0alF1ZXJ5KCAnI2Jvb2tpbmdfc2VhcmNoX2Zvcm0gLnNlYXJjaF9ib29raW5nJyApLnByb3AoICdkaXNhYmxlZCcsIGZhbHNlICk7XHJcblx0aWYgKCB1bmRlZmluZWQgIT0galF1ZXJ5KCAnI2Jvb2tpbmdfc2VhcmNoX2Zvcm0gLnNlYXJjaF9ib29raW5nJyApLmF0dHIoICdzYXZlZC1idXR0b24tY29sb3InICkgKXsgICAgIC8vIEZpeEluOiA5LjUuMS4yLlxyXG5cdFx0alF1ZXJ5KCAnI2Jvb2tpbmdfc2VhcmNoX2Zvcm0gLnNlYXJjaF9ib29raW5nJyApLmNzcyggJ2NvbG9yJywgalF1ZXJ5KCAnI2Jvb2tpbmdfc2VhcmNoX2Zvcm0gLnNlYXJjaF9ib29raW5nJyApLmF0dHIoICdzYXZlZC1idXR0b24tY29sb3InICkgKTtcclxuXHR9XHJcblx0alF1ZXJ5KCAnI2Jvb2tpbmdfc2VhcmNoX2Zvcm0gLnNlYXJjaF9ib29raW5nJyApLmNzcyggJ2N1cnNvcicsICdwb2ludGVyJyApO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCBhcyBTdHJpbmcgdGhlIGFsbCBWYWx1ZXMgZnJvbSBIVE1MIFNlYXJjaCBGb3JtIGZpZWxkcy4gXHRcdEUuZy46ICdzZWxlY3Rec2VhcmNoX3F1YW50aXR5XjJ+Li4uLidcclxuICpcclxuICogQHBhcmFtIHNlYXJjaF9mb3JtXHRcdC0gSFRNTCBEb20gRm9ybSBlbGVtZW50OiB0aGlzLmZvcm1cclxuICogQHJldHVybnMge3N0cmluZ31cdFx0LSAnc2VsZWN0XnNlYXJjaF9xdWFudGl0eV4yfi4uLi4nXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX3NlYXJjaF9mb3JtX19nZXRfYWxsX2lucHV0X2ZpZWxkc19kYXRhKCBzZWFyY2hfZm9ybSApe1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpeEluOiA3LjEuMi45LlxyXG5cclxuXHR2YXIgYWxsX3BhcmFtYXMgPSAnJztcclxuXHR2YXIgaW5wX2VsO1xyXG5cdHZhciBpbnBfdmFsO1xyXG5cclxuXHRmb3IgKCB2YXIgaSA9IDA7IGkgPCBzZWFyY2hfZm9ybS5sZW5ndGg7IGkrKyApe1xyXG5cclxuXHRcdGlmICggKHNlYXJjaF9mb3JtWyBpIF0udHlwZSA9PSAnY2hlY2tib3gnKSAmJiAoIXNlYXJjaF9mb3JtWyBpIF0uY2hlY2tlZCkgKXtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aW5wX2VsID0gc2VhcmNoX2Zvcm1bIGkgXS50eXBlICsgXCJeXCIgKyBzZWFyY2hfZm9ybVsgaSBdLm5hbWUgKyBcIl5cIjtcclxuXHJcblx0XHRpbnBfdmFsID0galF1ZXJ5KCBzZWFyY2hfZm9ybVsgaSBdICkudmFsKCk7XHJcblxyXG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCBpbnBfdmFsICkgKXtcclxuXHRcdFx0alF1ZXJ5LmVhY2goIGlucF92YWwsIGZ1bmN0aW9uICggaW5kZXggKXtcclxuXHRcdFx0XHRhbGxfcGFyYW1hcyArPSBpbnBfZWwgKyBpbnBfdmFsWyBpbmRleCBdICsgXCJ+XCI7XHJcblx0XHRcdH0gKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGFsbF9wYXJhbWFzICs9IGlucF9lbCArIGlucF92YWwgKyBcIn5cIjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBhbGxfcGFyYW1hcztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBEYXRlIHZhbHVlIFBhcnNlZCBmcm9tICBTZWFyY2ggRGF0ZSBmb3JtYXQgIHRvICAnMjAyNC0wNS0wNicgZm9ybWF0XHJcbiAqXHJcbiAqIEBwYXJhbSBodG1sX2lkXHRcdCcjc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX2luJyB8ICcjc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX291dCdcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfc2VhcmNoX2Zvcm1fX2dldF9wYXJzZWRfc2VhcmNoX2RhdGVfX2FzX3ltZCggaHRtbF9pZCApe1xyXG5cclxuXHR2YXIgYm9va2luZ19zZWFyY2hfZGF0ZSA9ICcnO1xyXG5cdGlmICggalF1ZXJ5KCBodG1sX2lkICkubGVuZ3RoICl7XHJcblx0XHRib29raW5nX3NlYXJjaF9kYXRlID0galF1ZXJ5KCBodG1sX2lkICkudmFsKCk7XHJcblx0fVxyXG5cclxuXHQvLyBTZXQgSlMgIGRhdGUgdG8gIHNvbWUgRnV0dXJlIGRhdGUsICB0aGF0IHdpbGwgYmUgYXZhaWxhYmxlIGZvciBzdXJlXHJcblx0dmFyIHNlYXJjaF9qc19kYXRlID0gbmV3IERhdGUoICcyMTAwLTAxLTAxJyApO1xyXG5cclxuXHQvLyBQYXJzZSBhIHN0cmluZyB2YWx1ZSBpbnRvIGEgZGF0ZSBvYmplY3RcclxuXHRpZiAoICcnICE9PSBib29raW5nX3NlYXJjaF9kYXRlICl7XHJcblxyXG5cdFx0c2VhcmNoX2pzX2RhdGUgPSBqUXVlcnkuZGF0ZXBpY2sucGFyc2VEYXRlKCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdzZWFyY2hfYXZ5X19kYXRlc19mb3JtYXQnICksIGJvb2tpbmdfc2VhcmNoX2RhdGUgKTtcclxuXHJcblx0XHQvLyBGb3JtYXQgYSBkYXRlIG9iamVjdCBpbnRvIGEgc3RyaW5nIHZhbHVlLlxyXG5cdFx0dmFyIHNlYXJjaF9zdHJpbmdfZGF0ZSA9IGpRdWVyeS5kYXRlcGljay5mb3JtYXREYXRl
522KCAneXktbW0tZGQnLCBzZWFyY2hfanNfZGF0ZSApO1xyXG5cclxuXHRcdHJldHVybiBzZWFyY2hfc3RyaW5nX2RhdGU7XHJcblxyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gJzIxMDAtMDEtMDEnOyBcdFx0XHRcdC8vIEZpeEluOiAxMC4yLjIuMS5cclxuXHR9XHJcbn1cclxuXHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gU2VhcmNoIFN1Ym1pdCAgLSAgTmV3IFBhZ2VcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vKipcclxuICogUHJlcGFyZSBmb3Igc3VibWl0IFNlYXJjaCBGb3JtICB0byBOZXcgUGFnZVxyXG4gKlxyXG4gKiBAcGFyYW0gc2VhcmNoX2Zvcm1cdFx0XHRIVE1MIERvbSAgZm9ybTogIHRoaXMuZm9ybVxyXG4gKiBAcGFyYW0gd3BkYmNfYWN0aXZlX2xvY2FsZVx0c3RyaW5nIGxvY2FsZTogXHQnZXNfRVMnXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19zZWFyY2hfZm9ybV9jbGlja19uZXdfcGFnZSggc2VhcmNoX2Zvcm0sIHdwZGJjX2FjdGl2ZV9sb2NhbGUgKXtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpeEluOiA4LjYuMS4yMS5cclxuXHJcblx0aWYgKCAnT2ZmJyAhPSBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdzZWFyY2hfYXZ5X193YXJuaW5nX19kYXRlc19yZXF1aXJlZF9lbmFibGVkJyApICl7XHJcblx0XHRpZiAoICgnJyA9PSBqUXVlcnkoICcjc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX2luJyApLnZhbCgpKSB8fCAoJycgPT0galF1ZXJ5KCAnI3NlYXJjaF9maWVsZF9fZGlzcGxheV9jaGVja19vdXQnICkudmFsKCkpICl7XHJcblx0XHRcdGFsZXJ0KCBfd3BiYy5nZXRfb3RoZXJfcGFyYW0oICdzZWFyY2hfYXZ5X193YXJuaW5nX19kYXRlc19yZXF1aXJlZF93YXJuaW5nJyApICk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblx0d3BiY19zZWFyY2hfZm9ybV9fZGlzYWJsZV9zdWJtaXRfYnV0dG9uKCk7XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBHZXQgU2VhcmNoIEZpZWxkczpcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0dmFyIHBhcmFtX19jaGVja19pbl95bWQgPSB3cGJjX3NlYXJjaF9mb3JtX19nZXRfcGFyc2VkX3NlYXJjaF9kYXRlX19hc195bWQoICcjc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX2luJyApO1x0XHRcdC8vIEZpeEluOiA5LjUuMy40LlxyXG5cdGpRdWVyeSggJ1tuYW1lPVwic2VhcmNoX2dldF9fY2hlY2tfaW5feW1kXCJdJyApLnZhbCggcGFyYW1fX2NoZWNrX2luX3ltZCApOyAgICAgICAgICBcdC8vIGluIGZvcm1hdCAgMjAyNC0wNS0wNlxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgcGFyYW1fX2NoZWNrX291dF95bWQgPSB3cGJjX3NlYXJjaF9mb3JtX19nZXRfcGFyc2VkX3NlYXJjaF9kYXRlX19hc195bWQoICcjc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX291dCcgKTtcclxuXHRqUXVlcnkoICdbbmFtZT1cInNlYXJjaF9nZXRfX2NoZWNrX291dF95bWRcIl0nICkudmFsKCBwYXJhbV9fY2hlY2tfb3V0X3ltZCApOyAgICAgICAgXHQvLyBpbiBmb3JtYXQgIDIwMjQtMDUtMDZcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0dmFyIHBhcmFtX19zZWFyY2hfcXVhbnRpdHkgPSAoalF1ZXJ5KCBcIltuYW1lPSdzZWFyY2hfcXVhbnRpdHknXVwiICkubGVuZ3RoID4gMClcclxuXHRcdFx0XHRcdFx0XHRcdD8galF1ZXJ5KCBcIltuYW1lPSdzZWFyY2hfcXVhbnRpdHknXVwiICkudmFsKClcclxuXHRcdFx0XHRcdFx0XHRcdDogMTtcclxuXHRqUXVlcnkoICdbbmFtZT1cInNlYXJjaF9nZXRfX3F1YW50aXR5XCJdJyApLnZhbCggcGFyYW1fX3NlYXJjaF9xdWFudGl0eSApO1xyXG5cdHZhciBwYXJhbV9fc2VhcmNoX3RpbWUgPSAoalF1ZXJ5KCBcIltuYW1lPSdzZWFyY2hfdGltZSddXCIgKS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdFx0XHRcdFx0PyBqUXVlcnkoIFwiW25hbWU9J3NlYXJjaF90aW1lJ11cIiApLnZhbCgpXHJcblx0XHRcdFx0XHRcdFx0XHQ6ICcnO1xyXG5cdGpRdWVyeSggJ1tuYW1lPVwic2VhcmNoX2dldF9fdGltZVwiXScgKS52YWwoIHBhcmFtX19zZWFyY2hfdGltZSApO1xyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgcGFyYW1fX3VzZXJzX2lkID0gKGpRdWVyeSggJyNzZWFyY2hfZmllbGRfX3VzZXJzX2lkJyApLmxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRcdFx0ID8galF1ZXJ5KCAnI3NlYXJjaF9maWVsZF9fdXNlcnNfaWQnICkudmFsKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0IDogJyc7XHJcblx0alF1ZXJ5KCAnW25hbWU9XCJzZWFyY2hfZ2V0X191c2Vyc19pZFwiXScgKS52YWwoIHBhcmFtX191c2Vyc19pZCApO1xyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR2YXIgcGFyYW1fX2V4dGVuZGVkX2RheXMgP
522SAoalF1ZXJ5KCBcImlucHV0W25hbWU9J3NlYXJjaF9maWVsZF9fZXh0ZW5kX3NlYXJjaF9kYXlzJ106Y2hlY2tlZFwiICkubGVuZ3RoID4gMClcclxuXHRcdFx0XHRcdFx0XHRcdD8galF1ZXJ5KCBcImlucHV0W25hbWU9J3NlYXJjaF9maWVsZF9fZXh0ZW5kX3NlYXJjaF9kYXlzJ11cIiApLnZhbCgpXHJcblx0XHRcdFx0XHRcdFx0XHQ6IDA7XHJcblx0alF1ZXJ5KCAnW25hbWU9XCJzZWFyY2hfZ2V0X19leHRlbmRcIl0nICkudmFsKCBwYXJhbV9fZXh0ZW5kZWRfZGF5cyApO1xyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBHZXQgYXMgU3RyaW5nIHRoZSBhbGwgVmFsdWVzIGZyb20gSFRNTCBTZWFyY2ggRm9ybSBmaWVsZHMuIFx0XHRFLmcuOiAnc2VsZWN0XnNlYXJjaF9xdWFudGl0eV4yfi4uLi4nXHJcblx0dmFyIHBhcmFtX19hbGxfYXNfc3RyID0gd3BiY19zZWFyY2hfZm9ybV9fZ2V0X2FsbF9pbnB1dF9maWVsZHNfZGF0YSggc2VhcmNoX2Zvcm0gKTtcclxuXHRwYXJhbV9fYWxsX2FzX3N0ciA9IHBhcmFtX19hbGxfYXNfc3RyLnJlcGxhY2VBbGwoICd+JywgJ19eXycgKTtcdFx0Ly8gU29tZSBzeXN0ZW1zIGRvIG5vdCBsaWtlIHN5bWJvbCAnficgaW4gVVJMLCBzbyAgd2UgbmVlZCB0byByZXBsYWNlIHRvICBzb21lIG90aGVyIHN5bWJvbHNcclxuXHJcblx0alF1ZXJ5KCAnW25hbWU9XCJzZWFyY2hfZ2V0X19jdXN0b21fcGFyYW1zXCJdJyApLnZhbCggcGFyYW1fX2FsbF9hc19zdHIgKTsgICAgICAgICAgXHRcdFx0Ly8gaW4gZm9ybWF0ICAnc2VsZWN0XnNlYXJjaF9xdWFudGl0eV4yfi4uLi4nXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRyZXR1cm4gIHRydWU7XHJcbn1cclxuXHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIFNlYXJjaCBTdWJtaXQgIC0gIEFqYXhcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLyoqXHJcbiAqIFN1Ym1pdCBTZWFyY2ggQWpheCByZXF1ZXN0LCAgYW5kIHNob3cgTG9hZGluZyBzcGlubmVyXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWFyY2hfZm9ybSAgICAgICAgICAgRE9NIEZvcm0gLT4gdGhpcy5mb3JtXHJcbiAqIEBwYXJhbSB3cGRldl9hY3RpdmVfbG9jYWxlICAgTG9jYWxlICAgLT4gJ2VzX0VTJ1xyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19zZWFyY2hfZm9ybV9jbGlja19hamF4KCBzZWFyY2hfZm9ybSwgd3BkZXZfYWN0aXZlX2xvY2FsZSApe1xyXG5cclxuXHRpZiAoICdPZmYnICE9IF93cGJjLmdldF9vdGhlcl9wYXJhbSggJ3NlYXJjaF9hdnlfX3dhcm5pbmdfX2RhdGVzX3JlcXVpcmVkX2VuYWJsZWQnICkgKXtcclxuXHRcdGlmICggKCcnID09PSBqUXVlcnkoICcjc2VhcmNoX2ZpZWxkX19kaXNwbGF5X2NoZWNrX2luJyApLnZhbCgpKSB8fCAoJycgPT09IGpRdWVyeSggJyNzZWFyY2hfZmllbGRfX2Rpc3BsYXlfY2hlY2tfb3V0JyApLnZhbCgpKSApe1xyXG5cdFx0XHRhbGVydCggX3dwYmMuZ2V0X290aGVyX3BhcmFtKCAnc2VhcmNoX2F2eV9fd2FybmluZ19fZGF0ZXNfcmVxdWlyZWRfd2FybmluZycgKSApO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBTaG93IExvYWRpbmcgU3Bpbm5lclxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vLy8gOjogT2xkIDo6XHJcblx0Ly9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm9va2luZ19zZWFyY2hfcmVzdWx0cycgKS5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT1cImhlaWdodDoyMHB4O3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjE1cHggYXV0bztcIj48aW1nICBzdHlsZT1cInZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3gtc2hhZG93Om5vbmU7d2lkdGg6MTRweDtcIiBzcmM9XCInK193cGJjLmdldF9vdGhlcl9wYXJhbSggJ3VybF9wbHVnaW4nICkrJy9hc3NldHMvaW1nL2FqYXgtbG9hZGVyLmdpZlwiPjwvL2Rpdj4nO1xyXG5cdC8vLy86OiBCaWcgTG9hZGluZyBDaXJjbGUgOjpcclxuXHQvL2pRdWVyeSggJyNib29raW5nX3NlYXJjaF9yZXN1bHRzJyApLmh0bWwoICc8ZGl2IGNsYXNzPVwid3BiY19ib29raW5nX2Zvcm1fc3Bpbl9sb2FkZXJcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTttYXJnaW4tdG9wOiA3MHB4O1wiPjxkaXYgY2xhc3M9XCJ3cGJjX3NwaW5zX2xvYWRlcl93cmFwcGVyXCI+PGRpdiBjbGFzcz1cIndwYmNfc3BpbnNfbG9hZGVyXCI+PC9kaXY+PC9kaXY+PC9kaXY+JyApO1xyXG5cclxuXHQvLy8vOjogTWluaSBMb2FkaW5nIENpcmNsZSA6OiAgICAgICAvLyBGaXhJbjogMTAuMC4wLjM4LlxyXG5cdGpRdWVyeSggJyNib29raW5nX3NlYXJjaF9yZXN1bHRzJyApLmh0bWwoICc8ZGl2IGNsYXNzPVwid3BiY19ib29raW5nX2Zvcm1fc3Bpbl9sb2FkZXJcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTttYXJnaW4tdG9wOiA1MHB4O1wiPjxkaXYgY2xhc3M9XCJ3cGJjX3NwaW5zX2xvYWRlcl93cmFwcGVyXCI+PGRpdiBjbGFzcz1cIndwYmNfc3Bpbl9sb2FkZXJfb25lX25ld1wiPjwvZGl2PjwvZGl2PjwvZGl2PicgKTtcclxuXHJcblx0d3BiY19hamF4X3NlYXJjaF9zdWJtaXQoIHNlYXJjaF9mb3JtLCB3cGRldl9hY3RpdmVfbG9jYWxlICk7XHJcbn1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlbmQgQWpheCBTZWFyY2ggQXZhaWxhYmlsaXR5IFJlcXVlc3RcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBzZWFyY2hfZm9ybVx0XHRcdEhUTUwgRG9tICBmb3JtOiAgdGhpcy5mb3JtXHJcblx0ICogQHBhcmFtIHdwZGJjX2FjdGl2ZV9sb2NhbGVcdHN0cmluZyBsb2NhbGU6IFx0J2VzX0VTJ1xyXG5cdCAqL1xyXG4gICAgZnVuY3Rpb24gd3BiY19hamF4X3NlYXJjaF9zdWJtaXQoIHNlYXJjaF9mb3JtLCB3cGRiY19hY3RpdmVfbG9jYWxlICkgeyAgICAgICAgICAgXHQvLyBGaXhJbjogNi4wLjEuMS5cclxuXHJcblx0XHQvLyBEaXNhYmxlIFN1Ym1pdCBidXR0b25cclxuXHRcdHdwYmNfc2VhcmNoX2Zvcm1fX2Rpc2FibGVfc3VibWl0X2J1dHRvbigpO1x0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRml4SW46IDkuOS4wLjQ1LlxyXG4gICAgICAgIGpRdWVyeSggJyNib29raW5nX3NlYXJjaF9mb3JtIC5zZWFyY2hfYm9va2luZycgKS5wcm9wKCAnZGlzYWJsZWQnLCB0cnVlICk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgc2VhcmNoIHJlc3VsdHNcclxuXHRcdGpRdWVyeSggJy5ib29raW5nX3NlYXJjaF9hamF4X2NvbnRhaW5lcicgKS5yZW1vdmUoKTtcclxuXHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHQvLyBHZXQgU2VhcmNoIEZpZWxkczpcclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0XHQvLyBHZXQgYXMgU3RyaW5nIHRoZSBhbGwgVmFsdWVzIGZyb20gSFRNTCBTZWFyY2ggRm9ybSBmaWVsZHMuIFx0XHRFLmcuOiAnc2VsZWN0XnNlYXJjaF9xdWFudGl0eV4yfi4uLi4nXHJcblx0XHR2YXIgcGFyYW1fX2FsbF9hc19zdHIgICAgPSB3cGJjX3NlYXJjaF9mb3JtX19nZXRfYWxsX2lucHV0X2ZpZWxkc19kYXRhKCBzZWFyY2hfZm9ybSApO1xyXG5cclxuXHRcdHZhciBwYXJhbV9fY2hlY2tfaW5feW1kICA9IHdwYmNfc2VhcmNoX2Zvcm1fX2dldF9wYXJzZWRfc2VhcmNoX2RhdGVfX2FzX3ltZCggJyNzZWFyY2hfZmllbGRfX2Rpc3BsYXlfY2hlY2tfaW4nICk7XHRcdC8vIEZpeEluOiA4LjYuMS4yMS5cclxuXHRcdHZhciBwYXJhbV9fY2hlY2tfb3V0X3ltZCA9IHdwYmNfc2VhcmNoX2Zvcm1fX2dldF9wYXJzZWRfc2VhcmNoX2RhdGVfX2FzX3ltZCggJyNzZWFyY2hfZmllbGRfX2Rpc3BsYXlfY2hlY2tfb3V0JyApO1xyXG5cclxuXHRcdHZhciBwYXJhbV9fdXNlcnNfaWQgPSAoalF1ZXJ5KCAnI3NlYXJjaF9maWVsZF9fdXNlcnNfaWQnICkubGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCA/IGpRdWVyeSggJyNzZWFyY2hfZmllbGRfX3VzZXJzX2lkJyApLnZhbCgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IDogJyc7XHJcblx0XHR2YXIgcGFyYW1fX2V4dGVuZGVkX2RheXMgP
522SAoalF1ZXJ5KCBcImlucHV0W25hbWU9J3NlYXJjaF9maWVsZF9fZXh0ZW5kX3NlYXJjaF9kYXlzJ106Y2hlY2tlZFwiICkubGVuZ3RoID4gMClcclxuXHRcdFx0XHRcdFx0XHRcdFx0PyBqUXVlcnkoIFwiaW5wdXRbbmFtZT0nc2VhcmNoX2ZpZWxkX19leHRlbmRfc2VhcmNoX2RheXMnXVwiICkudmFsKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0OiAwO1xyXG5cdFx0dmFyIHBhcmFtX19zZWFyY2hfcXVhbnRpdHkgPSAoalF1ZXJ5KCBcIltuYW1lPSdzZWFyY2hfcXVhbnRpdHknXVwiICkubGVuZ3RoID4gMClcclxuXHRcdFx0XHRcdFx0XHRcdFx0PyBqUXVlcnkoIFwiW25hbWU9J3NlYXJjaF9xdWFudGl0eSddXCIgKS52YWwoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IDE7XHJcblx0XHR2YXIgcGFyYW1fX3NlYXJjaF90aW1lID0gKGpRdWVyeSggXCJbbmFtZT0nc2VhcmNoX3RpbWUnXVwiICkubGVuZ3RoID4gMClcclxuXHRcdFx0XHRcdFx0XHRcdFx0PyBqUXVlcnkoIFwiW25hbWU9J3NlYXJjaF90aW1lJ11cIiApLnZhbCgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdDogJyc7XHJcblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0XHRqUXVlcnkuYWpheCh7XHJcblx0XHRcdHVybCAgICA6IHdwYmNfdXJsX2FqYXgsXHJcblx0XHRcdHR5cGUgICA6J1BPU1QnLFxyXG5cdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiAoIGRhdGEsIHRleHRTdGF0dXMgKXtcclxuXHRcdFx0XHRpZiAoIHRleHRTdGF0dXMgPT0gJ3N1Y2Nlc3MnICl7XHJcblxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQgICAgKCAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIChkYXRhKSApXHJcblx0XHRcdFx0XHQgICAgICYmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiAoZGF0YS5hanhfZGF0YV9zZWFyY2hfY29udGVudCkgKVxyXG5cdFx0XHRcdFx0KXtcclxuXHRcdFx0XHRcdFx0alF1ZXJ5KCAnI2Jvb2tpbmdfc2VhcmNoX3Jlc3VsdHMnICkuaHRtbCggZGF0YS5hanhfZGF0YV9zZWFyY2hfY29udGVudCApOy8vICc8ZGl2IGNsYXNzPVwid3BiY19ib29raW5nX2Zvcm1fc3Bpbl9sb2FkZXJcIlxyXG5cdFx0XHRcdFx0XHQvLyBqUXVlcnkoICcjYm9va2luZ19zZWFyY2hfYWpheCcgKS5odG1sKCBkYXRhLmFqeF9kYXRhX3NlYXJjaF9jb250ZW50ICk7XHJcblx0XHRcdFx0XHRcdC8vIGpRdWVyeSggXCIjYm9va2luZ19zZWFyY2hfYWpheFwiICkuYWZ0ZXIoIGpRdWVyeSggXCIjYm9va2luZ19zZWFyY2hfYWpheCAuYm9va2luZ19zZWFyY2hfYWpheF9jb250YWluZXJcIiApICk7XHJcblx0XHRcdFx0XHRcdC8vIGpRdWVyeSggXCIjYm9va2luZ19zZWFyY2hfYWpheFwiICkuaGlkZSgpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coICcgOjogU0VBUkNIIFJFU1BPTlNFIEVSUk9SIDo6ICcsIGRhdGEgKTtcclxuXHRcdFx0XHRcdFx0dmFyIGpxX25vZGUgPSBqUXVlcnkoICcjYm9va2luZ19zZWFyY2hfcmVzdWx0cycgKTtcclxuXHRcdFx0XHRcdFx0Ly8gU2hvdyBNZXNzYWdlXHJcblx0XHRcdFx0XHRcdHdwYmNfZnJvbnRfZW5kX19zaG93X21lc3NhZ2UoICcgOjogU0VBUkNIIFJFU1BPTlNFIEVSUk9SIDo6IDxicj4nICsgSlNPTi5zdHJpbmdpZnkoIGRhdGEgKS5yZXBsYWNlKCAvXFxuL2csIFwiPGJyIC8+XCIgKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgICAndHlwZScgICAgIDogJ3dhcm5pbmcnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2hvd19oZXJlJzogeydqcV9ub2RlJzoganFfbm9kZSwgJ3doZXJlJzogJ2FmdGVyJ30sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdpc19hcHBlbmQnOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc3R5bGUnICAgIDogJ3RleHQtYWxpZ246bGVmdDsnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZGVsYXknICAgIDogMzAwMDBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRcdFx0alF1ZXJ5KCAnI2Jvb2tpbmdfc2VhcmNoX3Jlc3VsdHMgLndwYmNfYm9va2luZ19mb3JtX3NwaW5fbG9hZGVyJykucmVtb3ZlKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR3cGJjX3NlYXJjaF9mb3JtX19lbmFibGVfc3VibWl0X2J1dHRvbigpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3I6IGZ1bmN0aW9uICggWE1MSHR0cFJlcXVlc3QsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duICl7IGNvbnNvbGUubG9nKCAgJ1dQQkMgRXJyb3IgOjogQWpheCBzZWFyY2ggRXJyb3Igc3RhdHVzOicgKyB0ZXh0U3RhdHVzICwgWE1MSHR0cFJlcXVlc3QgKTsgYWxlcnQoIFhNTEh0dHBSZXF1
522ZXN0LnN0YXR1cyArICcgJyArIFhNTEh0dHBSZXF1ZXN0LnN0YXR1c1RleHQgKTsgaWYgKCBYTUxIdHRwUmVxdWVzdC5zdGF0dXMgPT0gNTAwICl7ICBhbGVydCggJ1BsZWFzZSBjaGVjayBhdCB0aGlzIHBhZ2UgYWNjb3JkaW5nIHRoaXMgZXJyb3I6JyArICcgaHR0cHM6Ly93cGJvb2tpbmdjYWxlbmRhci5jb20vZmFxLyNhamF4LXNlbmRpbmctZXJyb3InICk7ICB9IH0sXHJcblx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRhY3Rpb24gICAgICAgICAgICAgICAgICAgIDogJ0JPT0tJTkdfU0VBUkNIJyxcclxuXHJcblx0XHRcdFx0c2VhcmNoX2FqeF9fY2hlY2tfaW5feW1kICA6IHBhcmFtX19jaGVja19pbl95bWQsXHJcblx0XHRcdFx0c2VhcmNoX2FqeF9fY2hlY2tfb3V0X3ltZCA6IHBhcmFtX19jaGVja19vdXRfeW1kLFxyXG5cdFx0XHRcdHNlYXJjaF9hanhfX3F1YW50aXR5ICAgICAgOiBwYXJhbV9fc2VhcmNoX3F1YW50aXR5LFxyXG5cdFx0XHRcdHNlYXJjaF9hanhfX3RpbWUgICAgICBcdCAgOiBwYXJhbV9fc2VhcmNoX3RpbWUsXHJcblxyXG5cdFx0XHRcdHNlYXJjaF9hanhfX2N1c3RvbV9wYXJhbXMgOiBwYXJhbV9fYWxsX2FzX3N0cixcclxuXHRcdFx0XHRzZWFyY2hfYWp4X19leHRlbmQgICAgICAgIDogcGFyYW1fX2V4dGVuZGVkX2RheXMsXHJcblx0XHRcdFx0c2VhcmNoX2FqeF9fdXNlcnNfaWQgICAgICA6IHBhcmFtX191c2Vyc19pZCxcclxuXHJcblx0XHRcdFx0d3BkZXZfYWN0aXZlX2xvY2FsZSAgICAgICA6IHdwZGJjX2FjdGl2ZV9sb2NhbGUsXHJcblx0XHRcdFx0d3BiY19ub25jZSAgICAgICAgICAgICAgICA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19zZWFyY2hfbm9uY2UnICkudmFsdWVcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyX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

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.