← All changes
|
includes/page-form-builder/form-settings/_out/settings_effects.js
+773
-39
10.15.7
→
11.9
View file →
| @@ -1,10 +1,10 @@ | ||
| 1 | 1 | "use strict"; |
| 2 | 2 | |
| 3 | -/** | |
| 4 | - * Applies effects in Canvas, after changing some settings in the right sidebar in BFB. | |
| 5 | - * | |
| 6 | - * @file ../includes/page-form-builder/form-settings/_src/settings_effects.js | |
| 3 | +/** | |
| 4 | + * Applies effects in Canvas, after changing some settings in the right sidebar in BFB. | |
| 5 | + * | |
| 6 | + * @file ../includes/page-form-builder/form-settings/_src/settings_effects.js | |
| 7 | 7 | */ |
| 8 | 8 | (function (w, d) { |
| 9 | 9 | 'use strict'; |
| 10 | 10 | |
| @@ -38,18 +38,20 @@ | ||
| 38 | 38 | if (!options || typeof options !== 'object') { |
| 39 | 39 | return; |
| 40 | 40 | } |
| 41 | 41 | Object.keys(options).forEach(function (k) { |
| 42 | - Effects.apply_one(k, options[k], ctx); | |
| 42 | + Effects.apply_one(k, options[k], Object.assign({ | |
| 43 | + options: options | |
| 44 | + }, ctx || {})); | |
| 43 | 45 | }); |
| 44 | 46 | }; |
| 45 | 47 | |
| 46 | - /** | |
| 47 | - * Normalize settings pack to the minimum required shape: | |
| 48 | - * { options: {}, css_vars: {} } | |
| 49 | - * | |
| 50 | - * @param {*} pack | |
| 51 | - * @return {{options:Object, css_vars:Object, bfb_options?:Object}|null} | |
| 48 | + /** | |
| 49 | + * Normalize settings pack to the minimum required shape: | |
| 50 | + * { options: {}, css_vars: {} } | |
| 51 | + * | |
| 52 | + * @param {*} pack | |
| 53 | + * @return {{options:Object, css_vars:Object, bfb_options?:Object}|null} | |
| 52 | 54 | */ |
| 53 | 55 | Effects.normalize_pack = function (pack) { |
| 54 | 56 | if (pack === null || typeof pack === 'undefined' || pack === '') { |
| 55 | 57 | return null; |
| @@ -88,15 +90,15 @@ | ||
| 88 | 90 | } |
| 89 | 91 | return pack; |
| 90 | 92 | }; |
| 91 | 93 | |
| 92 | - /** | |
| 93 | - * Re-apply settings effects after a canvas rebuild / structure load. | |
| 94 | - * | |
| 95 | - * This is needed because structure loading can replace DOM nodes that effects target. | |
| 96 | - * | |
| 97 | - * @param {*} settings_pack string|object settings_json pack (or plain options map) | |
| 98 | - * @param {Object} [ctx] | |
| 94 | + /** | |
| 95 | + * Re-apply settings effects after a canvas rebuild / structure load. | |
| 96 | + * | |
| 97 | + * This is needed because structure loading can replace DOM nodes that effects target. | |
| 98 | + * | |
| 99 | + * @param {*} settings_pack string|object settings_json pack (or plain options map) | |
| 100 | + * @param {Object} [ctx] | |
| 99 | 101 | */ |
| 100 | 102 | Effects.reapply_after_canvas = function (settings_pack, ctx) { |
| 101 | 103 | const pack = Effects.normalize_pack(settings_pack); |
| 102 | 104 | if (!pack) { |
| @@ -106,8 +108,11 @@ | ||
| 106 | 108 | // Apply immediately (best effort). |
| 107 | 109 | Effects.apply_all(pack.options, Object.assign({ |
| 108 | 110 | source: 'reapply_after_canvas' |
| 109 | 111 | }, ctx || {})); |
| 112 | + wpbc_bfb_global_form_style__apply(null, Object.assign({ | |
| 113 | + source: 'reapply_after_canvas' | |
| 114 | + }, ctx || {})); | |
| 110 | 115 | |
| 111 | 116 | // Some modules/hydration may run shortly after; do one more pass. |
| 112 | 117 | setTimeout(function () { |
| 113 | 118 | Effects.apply_all(pack.options, Object.assign({ |
| @@ -112,8 +117,11 @@ | ||
| 112 | 117 | setTimeout(function () { |
| 113 | 118 | Effects.apply_all(pack.options, Object.assign({ |
| 114 | 119 | source: 'reapply_after_canvas_delayed' |
| 115 | 120 | }, ctx || {})); |
| 121 | + wpbc_bfb_global_form_style__apply(null, Object.assign({ | |
| 122 | + source: 'reapply_after_canvas_delayed' | |
| 123 | + }, ctx || {})); | |
| 116 | 124 | }, 60); |
| 117 | 125 | }; |
| 118 | 126 | |
| 119 | 127 | // 1) Apply from AJAX load. |
| @@ -123,8 +131,11 @@ | ||
| 123 | 131 | Effects.apply_all(pack.options, { |
| 124 | 132 | source: 'apply' |
| 125 | 133 | }); |
| 126 | 134 | } |
| 135 | + wpbc_bfb_global_form_style__apply(null, { | |
| 136 | + source: 'apply-global-style' | |
| 137 | + }); | |
| 127 | 138 | }); |
| 128 | 139 | |
| 129 | 140 | // 2) Apply live from UI change (delegated). |
| 130 | 141 | function css_escape(value) { |
| @@ -150,9 +161,15 @@ | ||
| 150 | 161 | if (len_group) { |
| 151 | 162 | return len_group.querySelector('input[data-wpbc_slider_len_writer][data-wpbc-bfb-fs-key]') || len_group.querySelector('input[data-wpbc-bfb-fs-type="length"][data-wpbc-bfb-fs-key]') || null; |
| 152 | 163 | } |
| 153 | 164 | |
| 154 | - // 3) Range: event came from range input inside .wpbc_slider_range_group | |
| 165 | + // 3) Spacing: event came from vertical/horizontal number inside .wpbc_spacing_group. | |
| 166 | + const spacing_group = el.closest('.wpbc_spacing_group'); | |
| 167 | + if (spacing_group) { | |
| 168 | + return spacing_group.querySelector('input[data-wpbc_spacing_writer][data-wpbc-bfb-fs-key]') || spacing_group.querySelector('input[data-wpbc-bfb-fs-type="spacing"][data-wpbc-bfb-fs-key]') || null; | |
| 169 | + } | |
| 170 | + | |
| 171 | + // 4) Range: event came from range input inside .wpbc_slider_range_group | |
| 155 | 172 | const range_group = el.closest('.wpbc_slider_range_group'); |
| 156 | 173 | if (range_group) { |
| 157 | 174 | return range_group.querySelector('input[data-wpbc_slider_range_writer][data-wpbc-bfb-fs-key]') || range_group.querySelector('input[data-wpbc_slider_range_writer]') || null; |
| 158 | 175 | } |
| @@ -170,8 +187,21 @@ | ||
| 170 | 187 | const selector = control_id ? 'input[type="radio"][name="' + css_escape(control_id) + '"]:checked' : 'input[type="radio"]:checked'; |
| 171 | 188 | const checked = fs_root.querySelector(selector); |
| 172 | 189 | return checked ? String(checked.value || '') : ''; |
| 173 | 190 | } |
| 191 | + if (fs_type === 'spacing') { | |
| 192 | + const group = original_target && original_target.closest ? original_target.closest('.wpbc_spacing_group') : fs_root.closest('.wpbc_spacing_group'); | |
| 193 | + const vertical_input = group ? group.querySelector('input[data-wpbc_spacing_vertical]') : null; | |
| 194 | + const horizontal_input = group ? group.querySelector('input[data-wpbc_spacing_horizontal]') : null; | |
| 195 | + const writer = group ? group.querySelector('input[data-wpbc_spacing_writer]') : null; | |
| 196 | + const vertical = vertical_input ? String(vertical_input.value || '0') : '0'; | |
| 197 | + const horizontal = horizontal_input ? String(horizontal_input.value || vertical) : vertical; | |
| 198 | + const combined = wpbc_bfb_form_appearance__normalize_spacing_numbers(vertical, horizontal); | |
| 199 | + if (writer) { | |
| 200 | + writer.value = combined; | |
| 201 | + } | |
| 202 | + return combined; | |
| 203 | + } | |
| 174 | 204 | |
| 175 | 205 | // CHECKBOX / TOGGLE |
| 176 | 206 | if (original_target && original_target.type === 'checkbox' || fs_root.type === 'checkbox') { |
| 177 | 207 | const cb = original_target && original_target.type === 'checkbox' ? original_target : fs_root; |
| @@ -186,14 +216,9 @@ | ||
| 186 | 216 | return String(original_target.value); |
| 187 | 217 | } |
| 188 | 218 | return ''; |
| 189 | 219 | } |
| 190 | - function on_change(ev) { | |
| 191 | - // Ignore events dispatched by code (apply/reapply, slider sync, etc.). Effects should react only to real user input + explicit wpbc:bfb:form_settings:apply. | |
| 192 | - if (ev && ev.isTrusted === false) { | |
| 193 | - return; | |
| 194 | - } | |
| 195 | - const target = ev && ev.target; | |
| 220 | + function apply_change_from_target(target, event_type, event_source) { | |
| 196 | 221 | if (!target) { |
| 197 | 222 | return; |
| 198 | 223 | } |
| 199 | 224 | const fs_root = find_fs_root(target); |
| @@ -207,12 +232,12 @@ | ||
| 207 | 232 | const fs_type = String(fs_root.getAttribute('data-wpbc-bfb-fs-type') || ''); |
| 208 | 233 | const tag = String(target.tagName || '').toLowerCase(); |
| 209 | 234 | const type = String(target.type || '').toLowerCase(); |
| 210 | 235 | const use_change = fs_type === 'toggle' || fs_type === 'select' || fs_type === 'radio' || type === 'checkbox' || type === 'radio' || tag === 'select'; |
| 211 | - if (use_change && ev.type !== 'change') { | |
| 236 | + if (use_change && event_type !== 'change') { | |
| 212 | 237 | return; |
| 213 | 238 | } |
| 214 | - if (!use_change && ev.type !== 'input') { | |
| 239 | + if (!use_change && event_type !== 'input') { | |
| 215 | 240 | return; |
| 216 | 241 | } |
| 217 | 242 | // ------------------------------------------------------------------------------------------- |
| 218 | 243 | |
| @@ -222,28 +247,737 @@ | ||
| 222 | 247 | } |
| 223 | 248 | const scope = fs_root.getAttribute('data-wpbc-bfb-fs-scope') || ''; |
| 224 | 249 | const value = read_value_from_fs_root(fs_root, target); |
| 225 | 250 | Effects.apply_one(key, value, { |
| 226 | - source: 'ui', | |
| 251 | + source: event_source || 'ui', | |
| 227 | 252 | scope: scope, |
| 228 | 253 | control: target, |
| 229 | 254 | fs_root: fs_root |
| 230 | 255 | }); |
| 231 | 256 | } |
| 257 | + function is_coloris_control(target) { | |
| 258 | + if (!target || !target.matches) { | |
| 259 | + return false; | |
| 260 | + } | |
| 261 | + return target.matches('[data-wpbc-bfb-fs-type="color"], [data-inspector-type="color"], .wpbc_bfb_coloris'); | |
| 262 | + } | |
| 263 | + function on_change(ev) { | |
| 264 | + // Ignore generic synthetic events dispatched by code (apply/reapply, slider sync, etc.). | |
| 265 | + // Coloris dispatches synthetic input events while the user picks a color, so allow those color controls through. | |
| 266 | + if (ev && ev.isTrusted === false && !is_coloris_control(ev.target)) { | |
| 267 | + return; | |
| 268 | + } | |
| 269 | + apply_change_from_target(ev && ev.target, ev && ev.type, ev && ev.isTrusted === false ? 'coloris' : 'ui'); | |
| 270 | + } | |
| 232 | 271 | d.addEventListener('input', on_change, false); |
| 233 | 272 | d.addEventListener('change', on_change, false); |
| 273 | + function on_coloris_pick(ev) { | |
| 274 | + const detail = ev && ev.detail ? ev.detail : {}; | |
| 275 | + const target = detail.currentEl || detail.el || detail.input || ev.target || null; | |
| 276 | + if (!is_coloris_control(target)) { | |
| 277 | + return; | |
| 278 | + } | |
| 279 | + if (detail.color && target.value !== detail.color) { | |
| 280 | + target.value = detail.color; | |
| 281 | + } | |
| 282 | + apply_change_from_target(target, 'input', 'coloris'); | |
| 283 | + } | |
| 284 | + d.addEventListener('coloris:pick', on_coloris_pick, false); | |
| 285 | + d.addEventListener('wpbc:bfb:coloris:change', on_coloris_pick, false); | |
| 234 | 286 | })(window, document); |
| 287 | +function wpbc_bfb_form_appearance__get_presets() { | |
| 288 | + return { | |
| 289 | + bordered: { | |
| 290 | + background: '#ffffff', | |
| 291 | + borderColor: '#cccccc', | |
| 292 | + borderWidth: '1px', | |
| 293 | + radius: '2px', | |
| 294 | + padding: '10px 30px', | |
| 295 | + shadow: 'rgba(0, 0, 0, 0.05) 0px 2px 6px 0px' | |
| 296 | + }, | |
| 297 | + none: { | |
| 298 | + background: 'transparent', | |
| 299 | + borderColor: 'transparent', | |
| 300 | + borderWidth: '0px', | |
| 301 | + radius: '0px', | |
| 302 | + padding: '0px', | |
| 303 | + shadow: 'none' | |
| 304 | + }, | |
| 305 | + soft: { | |
| 306 | + background: '#f9f9fa', | |
| 307 | + borderColor: '#fff', | |
| 308 | + borderWidth: '3px', | |
| 309 | + radius: '8px', | |
| 310 | + padding: '20px', | |
| 311 | + shadow: 'rgba(15, 23, 42, 0.06) 0px 4px 16px 0px' | |
| 312 | + } | |
| 313 | + }; | |
| 314 | +} | |
| 315 | +function wpbc_bfb_form_appearance__is_dark_theme(options) { | |
| 316 | + options = options && typeof options === 'object' ? options : {}; | |
| 317 | + return 'wpbc_theme_dark_1' === String(options.booking_form_theme || ''); | |
| 318 | +} | |
| 319 | +function wpbc_bfb_form_appearance__get_preset_for_options(style, options) { | |
| 320 | + const presets = wpbc_bfb_form_appearance__get_presets(); | |
| 321 | + if (!wpbc_bfb_form_appearance__is_dark_theme(options)) { | |
| 322 | + return presets[style] || presets.bordered; | |
| 323 | + } | |
| 324 | + if ('soft' === style) { | |
| 325 | + return { | |
| 326 | + background: '#1f2937', | |
| 327 | + borderColor: '#334155', | |
| 328 | + borderWidth: '3px', | |
| 329 | + radius: '8px', | |
| 330 | + padding: '20px', | |
| 331 | + shadow: 'rgba(0, 0, 0, 0.24) 0px 4px 16px 0px' | |
| 332 | + }; | |
| 333 | + } | |
| 334 | + return presets[style] || presets.bordered; | |
| 335 | +} | |
| 336 | +function wpbc_bfb_form_appearance__sanitize_color(value, fallback) { | |
| 337 | + const v = String(value == null ? '' : value).trim(); | |
| 338 | + if (/^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(v)) { | |
| 339 | + return v; | |
| 340 | + } | |
| 341 | + if (v === 'transparent') { | |
| 342 | + return v; | |
| 343 | + } | |
| 344 | + return fallback; | |
| 345 | +} | |
| 346 | +function wpbc_bfb_form_appearance__sanitize_optional_color(value) { | |
| 347 | + return wpbc_bfb_form_appearance__sanitize_color(value, ''); | |
| 348 | +} | |
| 235 | 349 | |
| 350 | +/** | |
| 351 | + * Resolve an opaque accent color with the PHP-localized installation default. | |
| 352 | + * | |
| 353 | + * The Form Style effects live outside the registration IIFE, so the default is | |
| 354 | + * deliberately read from the shared localized payload at the point of use. | |
| 355 | + * Invalid requested and localized values return an empty string, allowing the | |
| 356 | + * caller to skip the accent overlay without throwing or producing invalid CSS. | |
| 357 | + * | |
| 358 | + * @param {*} value Requested accent color. | |
| 359 | + * @return {string} Valid three- or six-digit hexadecimal color, or an empty string. | |
| 360 | + */ | |
| 361 | +function wpbc_bfb_global_form_style__sanitize_accent_color(value) { | |
| 362 | + const requested_color = String(value == null ? '' : value).trim(); | |
| 363 | + if (/^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(requested_color)) { | |
| 364 | + return requested_color; | |
| 365 | + } | |
| 366 | + const settings_vars = window.wpbc_bfb_settings_vars && typeof window.wpbc_bfb_settings_vars === 'object' ? window.wpbc_bfb_settings_vars : {}; | |
| 367 | + const accent_defaults = settings_vars.form_accent_defaults && typeof settings_vars.form_accent_defaults === 'object' ? settings_vars.form_accent_defaults : {}; | |
| 368 | + const default_color = String(accent_defaults.booking_form_accent_color || '').trim(); | |
| 369 | + return /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(default_color) ? default_color : ''; | |
| 370 | +} | |
| 371 | +function wpbc_bfb_form_appearance__sanitize_length(value, fallback) { | |
| 372 | + const v = String(value == null ? '' : value).trim(); | |
| 373 | + if (/^\d+(?:\.\d+)?(?:px|rem|em|%)$/i.test(v)) { | |
| 374 | + return v; | |
| 375 | + } | |
| 376 | + return fallback; | |
| 377 | +} | |
| 378 | +function wpbc_bfb_form_appearance__sanitize_spacing(value, fallback) { | |
| 379 | + const v = String(value == null ? '' : value).trim().replace(/\s+/g, ' '); | |
| 380 | + const parts = v ? v.split(' ') : []; | |
| 381 | + if (parts.length < 1 || parts.length > 4) { | |
| 382 | + return fallback; | |
| 383 | + } | |
| 384 | + for (let i = 0; i < parts.length; i++) { | |
| 385 | + if (!/^\d+(?:\.\d+)?(?:px|rem|em|%)$/i.test(parts[i])) { | |
| 386 | + return fallback; | |
| 387 | + } | |
| 388 | + } | |
| 389 | + return parts.join(' '); | |
| 390 | +} | |
| 391 | +function wpbc_bfb_form_appearance__normalize_spacing_numbers(vertical, horizontal) { | |
| 392 | + const v = String(vertical == null ? '' : vertical).trim(); | |
| 393 | + const h = String(horizontal == null ? '' : horizontal).trim(); | |
| 394 | + const vertical_num = /^\d+(?:\.\d+)?$/.test(v) ? v : '0'; | |
| 395 | + const horizontal_num = /^\d+(?:\.\d+)?$/.test(h) ? h : vertical_num; | |
| 396 | + return vertical_num + 'px ' + horizontal_num + 'px'; | |
| 397 | +} | |
| 398 | +function wpbc_bfb_form_appearance__collect_options(ctx, key, value) { | |
| 399 | + let options = ctx && ctx.options && typeof ctx.options === 'object' ? Object.assign({}, ctx.options) : {}; | |
| 400 | + if (window.WPBC_BFB_FormSettings && typeof window.WPBC_BFB_FormSettings.collect === 'function') { | |
| 401 | + options = Object.assign(window.WPBC_BFB_FormSettings.collect('form') || {}, options); | |
| 402 | + } | |
| 403 | + if (key) { | |
| 404 | + options[String(key)] = value; | |
| 405 | + } | |
| 406 | + if (wpbc_bfb_form_appearance__is_custom_control_key(key)) { | |
| 407 | + options.booking_form_container_style = 'custom'; | |
| 408 | + wpbc_bfb_form_appearance__set_container_style_control('custom'); | |
| 409 | + } | |
| 410 | + return options; | |
| 411 | +} | |
| 412 | +function wpbc_bfb_form_appearance__get_custom_control_keys() { | |
| 413 | + return ['booking_form_background_color', 'booking_form_border_color', 'booking_form_border_width', 'booking_form_border_radius', 'booking_form_padding', 'booking_form_text_color', 'booking_form_field_background_color', 'booking_form_field_text_color', 'booking_form_field_border_color']; | |
| 414 | +} | |
| 415 | +function wpbc_bfb_form_appearance__is_custom_control_key(key) { | |
| 416 | + return wpbc_bfb_form_appearance__get_custom_control_keys().indexOf(String(key || '')) !== -1; | |
| 417 | +} | |
| 418 | +function wpbc_bfb_form_appearance__set_container_style_control(value) { | |
| 419 | + const control = document.querySelector('[data-wpbc-bfb-fs-key="booking_form_container_style"]'); | |
| 420 | + if (!control || control.value === value) { | |
| 421 | + return; | |
| 422 | + } | |
| 423 | + control.value = value; | |
| 424 | +} | |
| 425 | +function wpbc_bfb_form_appearance__set_radio_control(key, value) { | |
| 426 | + const row = document.querySelector('.wpbc_bfb__form_setting[data-key="' + key + '"]'); | |
| 427 | + if (!row) { | |
| 428 | + return; | |
| 429 | + } | |
| 430 | + const wrap = row.querySelector('.wpbc_bfb__form_setting_radio[data-wpbc-bfb-fs-controlid]'); | |
| 431 | + const control_id = wrap ? String(wrap.getAttribute('data-wpbc-bfb-fs-controlid') || '') : ''; | |
| 432 | + const radios = control_id ? row.querySelectorAll('input[type="radio"][name="' + control_id + '"]') : row.querySelectorAll('input[type="radio"]'); | |
| 433 | + radios.forEach(function (radio) { | |
| 434 | + const should_check = String(radio.value) === String(value == null ? '' : value); | |
| 435 | + radio.checked = should_check; | |
| 436 | + const choice = radio.closest ? radio.closest('.wpbc_theme_choice') : null; | |
| 437 | + if (choice) { | |
| 438 | + choice.classList.toggle('is-selected', should_check); | |
| 439 | + } | |
| 440 | + }); | |
| 441 | +} | |
| 442 | +function wpbc_bfb_form_appearance__set_select_control(key, value) { | |
| 443 | + const control = document.querySelector('[data-wpbc-bfb-fs-key="' + key + '"]'); | |
| 444 | + if (control) { | |
| 445 | + control.value = String(value == null ? '' : value); | |
| 446 | + } | |
| 447 | +} | |
| 448 | +function wpbc_bfb_form_appearance__get_current_options() { | |
| 449 | + return window.WPBC_BFB_FormSettings && typeof window.WPBC_BFB_FormSettings.collect === 'function' ? window.WPBC_BFB_FormSettings.collect('form') || {} : {}; | |
| 450 | +} | |
| 451 | +function wpbc_bfb_form_appearance__get_style_value_from_options(options) { | |
| 452 | + options = options && typeof options === 'object' ? options : {}; | |
| 453 | + const theme = String(options.booking_form_theme || ''); | |
| 454 | + const style = String(options.booking_form_container_style || 'inherit'); | |
| 455 | + if ('custom' === style) { | |
| 456 | + return 'custom'; | |
| 457 | + } | |
| 458 | + if ('inherit' === style || '' === style) { | |
| 459 | + return 'inherit'; | |
| 460 | + } | |
| 461 | + const prefix = 'wpbc_theme_dark_1' === theme ? 'dark' : 'light'; | |
| 462 | + if (['bordered', 'none', 'soft'].indexOf(style) === -1) { | |
| 463 | + return prefix + '_bordered'; | |
| 464 | + } | |
| 465 | + return prefix + '_' + style; | |
| 466 | +} | |
| 467 | +function wpbc_bfb_form_appearance__sync_form_style_control(options) { | |
| 468 | + wpbc_bfb_form_appearance__set_radio_control('booking_form_style', wpbc_bfb_form_appearance__get_style_value_from_options(options)); | |
| 469 | +} | |
| 470 | +function wpbc_bfb_form_appearance__resolve_form_style_choice(value) { | |
| 471 | + const current_options = wpbc_bfb_form_appearance__get_current_options(); | |
| 472 | + const current_theme = String(current_options.booking_form_theme || ''); | |
| 473 | + const choice = String(value || 'inherit'); | |
| 474 | + if ('custom' === choice) { | |
| 475 | + return { | |
| 476 | + booking_form_theme: current_theme, | |
| 477 | + booking_form_container_style: 'custom' | |
| 478 | + }; | |
| 479 | + } | |
| 480 | + if ('inherit' === choice || '' === choice) { | |
| 481 | + return { | |
| 482 | + booking_form_theme: '', | |
| 483 | + booking_form_container_style: 'inherit' | |
| 484 | + }; | |
| 485 | + } | |
| 486 | + const parts = choice.split('_'); | |
| 487 | + const theme = 'dark' === parts[0] ? 'wpbc_theme_dark_1' : ''; | |
| 488 | + const style = parts[1] || 'bordered'; | |
| 489 | + return { | |
| 490 | + booking_form_theme: theme, | |
| 491 | + booking_form_container_style: ['bordered', 'none', 'soft'].indexOf(style) === -1 ? 'bordered' : style | |
| 492 | + }; | |
| 493 | +} | |
| 494 | +function wpbc_bfb_form_appearance__is_user_theme_switch(ctx) { | |
| 495 | + const source = String(ctx && ctx.source ? ctx.source : ''); | |
| 496 | + return ['ui', 'coloris'].indexOf(source) !== -1; | |
| 497 | +} | |
| 498 | +function wpbc_bfb_form_appearance__is_custom_style(options) { | |
| 499 | + return String(options && options.booking_form_container_style ? options.booking_form_container_style : 'inherit') === 'custom'; | |
| 500 | +} | |
| 501 | +function wpbc_bfb_form_appearance__sync_custom_controls(options) { | |
| 502 | + const is_custom = wpbc_bfb_form_appearance__is_custom_style(options); | |
| 503 | + const reset_row = document.querySelector('[data-wpbc-bfb-custom-appearance-reset-row]'); | |
| 504 | + const base_theme_row = document.querySelector('.wpbc_bfb__form_setting[data-key="booking_form_theme"]'); | |
| 505 | + wpbc_bfb_form_appearance__get_custom_control_keys().forEach(function (key) { | |
| 506 | + const row = document.querySelector('.wpbc_bfb__form_setting[data-key="' + key + '"]'); | |
| 507 | + if (!row) { | |
| 508 | + return; | |
| 509 | + } | |
| 510 | + row.hidden = !is_custom; | |
| 511 | + row.setAttribute('aria-hidden', is_custom ? 'false' : 'true'); | |
| 512 | + row.classList.toggle('is-hidden', !is_custom); | |
| 513 | + }); | |
| 514 | + if (reset_row) { | |
| 515 | + reset_row.hidden = !is_custom; | |
| 516 | + reset_row.setAttribute('aria-hidden', is_custom ? 'false' : 'true'); | |
| 517 | + reset_row.classList.toggle('is-hidden', !is_custom); | |
| 518 | + } | |
| 519 | + if (base_theme_row) { | |
| 520 | + base_theme_row.hidden = !is_custom; | |
| 521 | + base_theme_row.setAttribute('aria-hidden', is_custom ? 'false' : 'true'); | |
| 522 | + base_theme_row.classList.toggle('is-hidden', !is_custom); | |
| 523 | + } | |
| 524 | +} | |
| 525 | +function wpbc_bfb_form_appearance__resolve(options) { | |
| 526 | + let style = String(options.booking_form_container_style || 'inherit'); | |
| 527 | + if (style === 'inherit') { | |
| 528 | + const global_options = window.wpbc_bfb_settings_vars && window.wpbc_bfb_settings_vars.global_appearance ? window.wpbc_bfb_settings_vars.global_appearance : {}; | |
| 529 | + options = Object.assign({}, global_options || {}); | |
| 530 | + style = String(options.booking_form_container_style || 'bordered'); | |
| 531 | + } | |
| 532 | + if (style === 'bordered') { | |
| 533 | + return null; | |
| 534 | + } | |
| 535 | + if (style !== 'custom') { | |
| 536 | + return wpbc_bfb_form_appearance__get_preset_for_options(style, options); | |
| 537 | + } | |
| 538 | + return { | |
| 539 | + background: wpbc_bfb_form_appearance__sanitize_color(options.booking_form_background_color, '#ffffff'), | |
| 540 | + borderColor: wpbc_bfb_form_appearance__sanitize_color(options.booking_form_border_color, '#cccccc'), | |
| 541 | + borderWidth: wpbc_bfb_form_appearance__sanitize_length(options.booking_form_border_width, '1px'), | |
| 542 | + radius: wpbc_bfb_form_appearance__sanitize_length(options.booking_form_border_radius, '2px'), | |
| 543 | + padding: wpbc_bfb_form_appearance__sanitize_spacing(options.booking_form_padding, '10px 30px'), | |
| 544 | + shadow: 'rgba(0, 0, 0, 0.05) 0px 2px 6px 0px' | |
| 545 | + }; | |
| 546 | +} | |
| 547 | +function wpbc_bfb_form_appearance__resolve_design_colors(options) { | |
| 548 | + options = options && typeof options === 'object' ? options : {}; | |
| 549 | + if (!wpbc_bfb_form_appearance__is_custom_style(options)) { | |
| 550 | + if (wpbc_bfb_form_appearance__is_dark_theme(options) && 'none' === String(options.booking_form_container_style || '')) { | |
| 551 | + return { | |
| 552 | + textColor: '#1d2327', | |
| 553 | + fieldBackground: '', | |
| 554 | + fieldText: '', | |
| 555 | + fieldBorder: '' | |
| 556 | + }; | |
| 557 | + } | |
| 558 | + return { | |
| 559 | + textColor: '', | |
| 560 | + fieldBackground: '', | |
| 561 | + fieldText: '', | |
| 562 | + fieldBorder: '' | |
| 563 | + }; | |
| 564 | + } | |
| 565 | + return { | |
| 566 | + textColor: wpbc_bfb_form_appearance__sanitize_optional_color(options.booking_form_text_color), | |
| 567 | + fieldBackground: wpbc_bfb_form_appearance__sanitize_optional_color(options.booking_form_field_background_color), | |
| 568 | + fieldText: wpbc_bfb_form_appearance__sanitize_optional_color(options.booking_form_field_text_color), | |
| 569 | + fieldBorder: wpbc_bfb_form_appearance__sanitize_optional_color(options.booking_form_field_border_color) | |
| 570 | + }; | |
| 571 | +} | |
| 572 | +function wpbc_bfb_form_appearance__apply_vars(value, ctx) { | |
| 573 | + const options = wpbc_bfb_form_appearance__collect_options(ctx, ctx && ctx.key, value); | |
| 574 | + const resolved = wpbc_bfb_form_appearance__resolve(options); | |
| 575 | + const design = wpbc_bfb_form_appearance__resolve_design_colors(options); | |
| 576 | + const is_custom = wpbc_bfb_form_appearance__is_custom_style(options); | |
| 577 | + const root = ctx && ctx.canvas; | |
| 578 | + wpbc_bfb_form_appearance__sync_form_style_control(options); | |
| 579 | + wpbc_bfb_form_appearance__sync_custom_controls(options); | |
| 580 | + if (!root || !root.querySelectorAll) { | |
| 581 | + return; | |
| 582 | + } | |
| 583 | + const wraps = root.querySelectorAll('.wpbc_bfb__form_preview_section_container, .wpbc_bfb_form'); | |
| 584 | + if (!wraps.length) { | |
| 585 | + return; | |
| 586 | + } | |
| 587 | + wraps.forEach(function (wrap) { | |
| 588 | + if (!wrap || !wrap.style) { | |
| 589 | + return; | |
| 590 | + } | |
| 591 | + wrap.classList.toggle('wpbc_bfb_form_appearance_custom', is_custom); | |
| 592 | + if (!resolved) { | |
| 593 | + wrap.style.removeProperty('--wpbc-bfb-form-background'); | |
| 594 | + wrap.style.removeProperty('--wpbc-bfb-form-border-color'); | |
| 595 | + wrap.style.removeProperty('--wpbc-bfb-form-border-width'); | |
| 596 | + wrap.style.removeProperty('--wpbc-bfb-form-border-radius'); | |
| 597 | + wrap.style.removeProperty('--wpbc-bfb-form-padding'); | |
| 598 | + wrap.style.removeProperty('--wpbc-bfb-form-box-shadow'); | |
| 599 | + } else { | |
| 600 | + wrap.style.setProperty('--wpbc-bfb-form-background', resolved.background); | |
| 601 | + wrap.style.setProperty('--wpbc-bfb-form-border-color', resolved.borderColor); | |
| 602 | + wrap.style.setProperty('--wpbc-bfb-form-border-width', resolved.borderWidth); | |
| 603 | + wrap.style.setProperty('--wpbc-bfb-form-border-radius', resolved.radius); | |
| 604 | + wrap.style.setProperty('--wpbc-bfb-form-padding', resolved.padding); | |
| 605 | + wrap.style.setProperty('--wpbc-bfb-form-box-shadow', resolved.shadow); | |
| 606 | + } | |
| 607 | + if (design.textColor) { | |
| 608 | + wrap.style.setProperty('--wpbc_form-label-color', design.textColor); | |
| 609 | + wrap.style.setProperty('--wpbc_form-label-sublabel-color', design.textColor); | |
| 610 | + } else { | |
| 611 | + wrap.style.removeProperty('--wpbc_form-label-color'); | |
| 612 | + wrap.style.removeProperty('--wpbc_form-label-sublabel-color'); | |
| 613 | + } | |
| 614 | + if (design.fieldBackground) { | |
| 615 | + wrap.style.setProperty('--wpbc_form-field-background-color', design.fieldBackground); | |
| 616 | + wrap.style.setProperty('--wpbc_form-field-menu-color', design.fieldBackground); | |
| 617 | + } else { | |
| 618 | + wrap.style.removeProperty('--wpbc_form-field-background-color'); | |
| 619 | + wrap.style.removeProperty('--wpbc_form-field-menu-color'); | |
| 620 | + } | |
| 621 | + if (design.fieldText) { | |
| 622 | + wrap.style.setProperty('--wpbc_form-field-text-color', design.fieldText); | |
| 623 | + } else { | |
| 624 | + wrap.style.removeProperty('--wpbc_form-field-text-color'); | |
| 625 | + } | |
| 626 | + if (design.fieldBorder) { | |
| 627 | + wrap.style.setProperty('--wpbc_form-field-border-color', design.fieldBorder); | |
| 628 | + wrap.style.setProperty('--wpbc_form-field-border-color-spare', design.fieldBorder); | |
| 629 | + } else { | |
| 630 | + wrap.style.removeProperty('--wpbc_form-field-border-color'); | |
| 631 | + wrap.style.removeProperty('--wpbc_form-field-border-color-spare'); | |
| 632 | + } | |
| 633 | + }); | |
| 634 | +} | |
| 635 | +function wpbc_bfb_global_form_style__get_vars() { | |
| 636 | + return window.wpbc_bfb_settings_vars || {}; | |
| 637 | +} | |
| 638 | +function wpbc_bfb_global_form_style__get_presets() { | |
| 639 | + const vars = wpbc_bfb_global_form_style__get_vars(); | |
| 640 | + return vars.form_style_presets && typeof vars.form_style_presets === 'object' ? vars.form_style_presets : {}; | |
| 641 | +} | |
| 642 | +function wpbc_bfb_global_form_style__get_custom_keys() { | |
| 643 | + return ['booking_form_custom_background_color', 'booking_form_custom_border_color', 'booking_form_custom_border_width', 'booking_form_custom_border_radius', 'booking_form_custom_padding_vertical', 'booking_form_custom_padding_horizontal', 'booking_form_custom_text_color', 'booking_form_custom_field_background_color', 'booking_form_custom_field_text_color', 'booking_form_custom_field_border_color', 'booking_form_custom_button_background_color', 'booking_form_custom_button_text_color', 'booking_form_custom_button_border_color', 'booking_form_custom_button_hover_background_color', 'booking_form_custom_button_hover_text_color', 'booking_form_custom_button_hover_border_color', 'booking_form_custom_secondary_button_background_color', 'booking_form_custom_secondary_button_text_color', 'booking_form_custom_secondary_button_border_color', 'booking_form_custom_secondary_button_hover_background_color', 'booking_form_custom_secondary_button_hover_text_color', 'booking_form_custom_secondary_button_hover_border_color', 'booking_form_custom_button_border_width', 'booking_form_custom_button_border_radius']; | |
| 644 | +} | |
| 645 | +function wpbc_bfb_global_form_style__get_custom_defaults() { | |
| 646 | + const vars = wpbc_bfb_global_form_style__get_vars(); | |
| 647 | + const localized = vars.custom_form_style_defaults && typeof vars.custom_form_style_defaults === 'object' ? vars.custom_form_style_defaults : {}; | |
| 648 | + return Object.assign({ | |
| 649 | + booking_form_custom_background_color: '#ffffff', | |
| 650 | + booking_form_custom_border_color: '#cccccc', | |
| 651 | + booking_form_custom_border_width: '1px', | |
| 652 | + booking_form_custom_border_radius: '2px', | |
| 653 | + booking_form_custom_padding_vertical: '10px', | |
| 654 | + booking_form_custom_padding_horizontal: '30px', | |
| 655 | + booking_form_custom_text_color: '#1d2327', | |
| 656 | + booking_form_custom_field_background_color: '#ffffff', | |
| 657 | + booking_form_custom_field_text_color: '#3c434a', | |
| 658 | + booking_form_custom_field_border_color: '#cccccc', | |
| 659 | + booking_form_custom_button_background_color: '#066aab', | |
| 660 | + booking_form_custom_button_text_color: '#ffffff', | |
| 661 | + booking_form_custom_button_border_color: '#066aab', | |
| 662 | + booking_form_custom_button_hover_background_color: '#055589', | |
| 663 | + booking_form_custom_button_hover_text_color: '#ffffff', | |
| 664 | + booking_form_custom_button_hover_border_color: '#055589', | |
| 665 | + booking_form_custom_secondary_button_background_color: '#fdfdfd', | |
| 666 | + booking_form_custom_secondary_button_text_color: '#444444', | |
| 667 | + booking_form_custom_secondary_button_border_color: '#eeeeee', | |
| 668 | + booking_form_custom_secondary_button_hover_background_color: '#fdfdfd', | |
| 669 | + booking_form_custom_secondary_button_hover_text_color: '#444444', | |
| 670 | + booking_form_custom_secondary_button_hover_border_color: '#4d91cd', | |
| 671 | + booking_form_custom_button_border_width: '1px', | |
| 672 | + booking_form_custom_button_border_radius: '3px' | |
| 673 | + }, localized); | |
| 674 | +} | |
| 675 | +function wpbc_bfb_global_form_style__get_current_options(ctx, key, value) { | |
| 676 | + const vars = wpbc_bfb_global_form_style__get_vars(); | |
| 677 | + let options = vars.global_form_style && typeof vars.global_form_style === 'object' ? Object.assign({}, vars.global_form_style) : {}; | |
| 678 | + if (window.WPBC_BFB_FormSettings && typeof window.WPBC_BFB_FormSettings.collect === 'function') { | |
| 679 | + options = Object.assign(options, window.WPBC_BFB_FormSettings.collect('global') || {}); | |
| 680 | + } | |
| 681 | + if (ctx && ctx.options && typeof ctx.options === 'object') { | |
| 682 | + options = Object.assign(options, ctx.options); | |
| 683 | + } | |
| 684 | + if (key) { | |
| 685 | + options[String(key)] = value; | |
| 686 | + } | |
| 687 | + if (!options.booking_form_style) { | |
| 688 | + options.booking_form_style = 'light_bordered'; | |
| 689 | + } | |
| 690 | + return options; | |
| 691 | +} | |
| 692 | +function wpbc_bfb_global_form_style__mix_colors(color, target, amount) { | |
| 693 | + let source = wpbc_bfb_global_form_style__sanitize_accent_color(color).replace('#', ''); | |
| 694 | + const destination = wpbc_bfb_form_appearance__sanitize_color(target, '#000000').replace('#', ''); | |
| 695 | + const channels = []; | |
| 696 | + if (!source) { | |
| 697 | + return ''; | |
| 698 | + } | |
| 699 | + if (source.length === 3) { | |
| 700 | + source = source.replace(/./g, function (value) { | |
| 701 | + return value + value; | |
| 702 | + }); | |
| 703 | + } | |
| 704 | + for (let index = 0; index < 3; index++) { | |
| 705 | + const source_channel = parseInt(source.substr(index * 2, 2), 16); | |
| 706 | + const target_channel = parseInt(destination.substr(index * 2, 2), 16); | |
| 707 | + channels.push(Math.round(source_channel + (target_channel - source_channel) * amount)); | |
| 708 | + } | |
| 709 | + return '#' + channels.map(function (channel) { | |
| 710 | + return ('0' + channel.toString(16)).slice(-2); | |
| 711 | + }).join(''); | |
| 712 | +} | |
| 713 | +function wpbc_bfb_global_form_style__get_luminance(color) { | |
| 714 | + let hex = wpbc_bfb_global_form_style__sanitize_accent_color(color).replace('#', ''); | |
| 715 | + if (!hex) { | |
| 716 | + return 0; | |
| 717 | + } | |
| 718 | + if (hex.length === 3) { | |
| 719 | + hex = hex.replace(/./g, function (value) { | |
| 720 | + return value + value; | |
| 721 | + }); | |
| 722 | + } | |
| 723 | + const channels = [0, 1, 2].map(function (index) { | |
| 724 | + const channel = parseInt(hex.substr(index * 2, 2), 16) / 255; | |
| 725 | + return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4); | |
| 726 | + }); | |
| 727 | + return 0.2126 * channels[0] + 0.7152 * channels[1] + 0.0722 * channels[2]; | |
| 728 | +} | |
| 729 | + | |
| 730 | +/** | |
| 731 | + * Apply shared accent variables without masking explicit Custom button controls. | |
| 732 | + * | |
| 733 | + * @param {Object} css_vars Resolved base style variables. | |
| 734 | + * @param {Object} options Current global style options. | |
| 735 | + * @param {boolean} preserve_custom_button_colors Whether Custom button variables remain authoritative. | |
| 736 | + * @return {Object} Resolved variables with the optional accent overlay. | |
| 737 | + */ | |
| 738 | +function wpbc_bfb_global_form_style__apply_accent(css_vars, options, preserve_custom_button_colors) { | |
| 739 | + if (String(options.booking_form_accent_enabled || 'Off') !== 'On') { | |
| 740 | + return css_vars; | |
| 741 | + } | |
| 742 | + const accent = wpbc_bfb_global_form_style__sanitize_accent_color(options.booking_form_accent_color); | |
| 743 | + if (!accent) { | |
| 744 | + return css_vars; | |
| 745 | + } | |
| 746 | + const luminance = wpbc_bfb_global_form_style__get_luminance(accent); | |
| 747 | + const contrast = luminance > 0.18 ? '#000000' : '#ffffff'; | |
| 748 | + const hover_target = '#ffffff' === contrast ? '#000000' : '#ffffff'; | |
| 749 | + const hover = wpbc_bfb_global_form_style__mix_colors(accent, hover_target, 0.10); | |
| 750 | + const hover_contrast = contrast; | |
| 751 | + const accent_overlay = { | |
| 752 | + '--wpbc_form-accent-color': accent, | |
| 753 | + '--wpbc_form-accent-hover-color': hover, | |
| 754 | + '--wpbc_form-accent-contrast-color': contrast, | |
| 755 | + '--wpbc_form-field-focus-border-color': accent, | |
| 756 | + '--wpbc_form-field-focus-shadow-color': accent, | |
| 757 | + '--wpbc_form-choice-checked-border-color': accent, | |
| 758 | + '--wpbc_form-choice-checked-color': accent, | |
| 759 | + '--wpbc_form-choice-focus-color': accent, | |
| 760 | + '--wpbc_form-button-background-color': accent, | |
| 761 | + '--wpbc_form-button-background-color-alt': accent, | |
| 762 | + '--wpbc_form-button-border-color': accent, | |
| 763 | + '--wpbc_form-button-text-color': contrast, | |
| 764 | + '--wpbc_form-button-text-color-alt': contrast, | |
| 765 | + '--wpbc_form-button-hover-background-color': hover, | |
| 766 | + '--wpbc_form-button-hover-border-color': hover, | |
| 767 | + '--wpbc_form-button-hover-text-color': hover_contrast, | |
| 768 | + '--wpbc_form-button-light-hover-border-color': accent, | |
| 769 | + '--wpbc_form-button-primary-hover-border-color': hover, | |
| 770 | + '--wpbc_form-page-break-color': accent | |
| 771 | + }; | |
| 772 | + if (preserve_custom_button_colors) { | |
| 773 | + ['--wpbc_form-button-background-color', '--wpbc_form-button-background-color-alt', '--wpbc_form-button-border-color', '--wpbc_form-button-text-color', '--wpbc_form-button-text-color-alt', '--wpbc_form-button-hover-background-color', '--wpbc_form-button-hover-border-color', '--wpbc_form-button-hover-text-color', '--wpbc_form-button-light-hover-border-color', '--wpbc_form-button-primary-hover-border-color'].forEach(function (css_var_name) { | |
| 774 | + delete accent_overlay[css_var_name]; | |
| 775 | + }); | |
| 776 | + } | |
| 777 | + return Object.assign({}, css_vars, accent_overlay); | |
| 778 | +} | |
| 779 | +function wpbc_bfb_global_form_style__resolve_css_vars(options) { | |
| 780 | + options = options && typeof options === 'object' ? options : {}; | |
| 781 | + const style = String(options.booking_form_style || 'light_bordered'); | |
| 782 | + const presets = wpbc_bfb_global_form_style__get_presets(); | |
| 783 | + const preset = presets[style] || presets.light_bordered || {}; | |
| 784 | + const defaults = wpbc_bfb_global_form_style__get_custom_defaults(); | |
| 785 | + if ('custom' !== style) { | |
| 786 | + return wpbc_bfb_global_form_style__apply_accent(preset.css_vars && typeof preset.css_vars === 'object' ? Object.assign({}, preset.css_vars) : {}, options); | |
| 787 | + } | |
| 788 | + const css_vars = { | |
| 789 | + '--wpbc-bfb-form-background': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_background_color, defaults.booking_form_custom_background_color), | |
| 790 | + '--wpbc-bfb-form-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_border_color, defaults.booking_form_custom_border_color), | |
| 791 | + '--wpbc-bfb-form-border-width': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_border_width, defaults.booking_form_custom_border_width), | |
| 792 | + '--wpbc-bfb-form-border-radius': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_border_radius, defaults.booking_form_custom_border_radius), | |
| 793 | + '--wpbc-bfb-form-padding': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_padding_vertical, defaults.booking_form_custom_padding_vertical) + ' ' + wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_padding_horizontal, defaults.booking_form_custom_padding_horizontal), | |
| 794 | + '--wpbc-bfb-form-box-shadow': 'rgba(0, 0, 0, 0.05) 0px 2px 6px 0px', | |
| 795 | + '--wpbc_form-label-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_text_color, defaults.booking_form_custom_text_color), | |
| 796 | + '--wpbc_form-label-sublabel-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_text_color, defaults.booking_form_custom_text_color), | |
| 797 | + '--wpbc_form-label-error-color': '#d63637', | |
| 798 | + '--wpbc_form-field-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_background_color, defaults.booking_form_custom_field_background_color), | |
| 799 | + '--wpbc_form-field-menu-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_background_color, defaults.booking_form_custom_field_background_color), | |
| 800 | + '--wpbc_form-field-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_text_color, defaults.booking_form_custom_field_text_color), | |
| 801 | + '--wpbc_form-field-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_border_color, defaults.booking_form_custom_field_border_color), | |
| 802 | + '--wpbc_form-field-border-color-spare': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_border_color, defaults.booking_form_custom_field_border_color), | |
| 803 | + '--wpbc_form-field-focus-border-color': '#066aab', | |
| 804 | + '--wpbc_form-field-focus-shadow-color': '#066aab', | |
| 805 | + '--wpbc_form-field-disabled-color': 'rgba(0, 0, 0, 0.2)', | |
| 806 | + '--wpbc_form-button-border-radius': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_button_border_radius, defaults.booking_form_custom_button_border_radius), | |
| 807 | + '--wpbc_form-button-border-style': 'solid', | |
| 808 | + '--wpbc_form-button-border-size': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_button_border_width, defaults.booking_form_custom_button_border_width), | |
| 809 | + '--wpbc_form-button-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_background_color, defaults.booking_form_custom_button_background_color), | |
| 810 | + '--wpbc_form-button-background-color-alt': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_background_color, defaults.booking_form_custom_button_background_color), | |
| 811 | + '--wpbc_form-button-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_border_color, defaults.booking_form_custom_button_border_color), | |
| 812 | + '--wpbc_form-button-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_text_color, defaults.booking_form_custom_button_text_color), | |
| 813 | + '--wpbc_form-button-text-color-alt': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_text_color, defaults.booking_form_custom_button_text_color), | |
| 814 | + '--wpbc_form-button-hover-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_hover_background_color, defaults.booking_form_custom_button_hover_background_color), | |
| 815 | + '--wpbc_form-button-hover-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_hover_border_color, defaults.booking_form_custom_button_hover_border_color), | |
| 816 | + '--wpbc_form-button-hover-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_hover_text_color, defaults.booking_form_custom_button_hover_text_color), | |
| 817 | + '--wpbc_form-choice-checked-border-color': '#066aab', | |
| 818 | + '--wpbc_form-choice-checked-color': '#066aab', | |
| 819 | + '--wpbc_form-choice-focus-color': '#066aab', | |
| 820 | + '--wpbc_form-button-light-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_background_color, defaults.booking_form_custom_secondary_button_background_color), | |
| 821 | + '--wpbc_form-button-light-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_border_color, defaults.booking_form_custom_secondary_button_border_color), | |
| 822 | + '--wpbc_form-button-light-border-size': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_button_border_width, defaults.booking_form_custom_button_border_width), | |
| 823 | + '--wpbc_form-button-light-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_text_color, defaults.booking_form_custom_secondary_button_text_color), | |
| 824 | + '--wpbc_form-button-light-box-shadow': '0 2px 10px 2px #ffffff54', | |
| 825 | + '--wpbc_form-button-light-hover-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_hover_background_color, defaults.booking_form_custom_secondary_button_hover_background_color), | |
| 826 | + '--wpbc_form-button-light-hover-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_hover_border_color, defaults.booking_form_custom_secondary_button_hover_border_color), | |
| 827 | + '--wpbc_form-button-light-hover-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_hover_text_color, defaults.booking_form_custom_secondary_button_hover_text_color), | |
| 828 | + '--wpbc_form-button-light-hover-box-shadow': '0 2px 10px 2px #ffffff54', | |
| 829 | + '--wpbc_form-button-primary-hover-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_hover_border_color, defaults.booking_form_custom_button_hover_border_color), | |
| 830 | + '--wpbc_form-page-break-color': '#066aab' | |
| 831 | + }; | |
| 832 | + return wpbc_bfb_global_form_style__apply_accent(css_vars, options, true); | |
| 833 | +} | |
| 834 | +function wpbc_bfb_global_form_style__get_css_var_keys(options) { | |
| 835 | + const vars = wpbc_bfb_global_form_style__get_vars(); | |
| 836 | + const localized = Array.isArray(vars.form_style_css_var_names) ? vars.form_style_css_var_names : []; | |
| 837 | + const keys = []; | |
| 838 | + const presets = wpbc_bfb_global_form_style__get_presets(); | |
| 839 | + if (localized.length) { | |
| 840 | + return localized; | |
| 841 | + } | |
| 842 | + Object.keys(presets).forEach(function (preset_key) { | |
| 843 | + const preset = presets[preset_key] || {}; | |
| 844 | + const css_vars = preset.css_vars && typeof preset.css_vars === 'object' ? preset.css_vars : {}; | |
| 845 | + Object.keys(css_vars).forEach(function (var_name) { | |
| 846 | + if (keys.indexOf(var_name) === -1) { | |
| 847 | + keys.push(var_name); | |
| 848 | + } | |
| 849 | + }); | |
| 850 | + }); | |
| 851 | + Object.keys(wpbc_bfb_global_form_style__resolve_css_vars(Object.assign({}, options || {}, { | |
| 852 | + booking_form_style: 'custom' | |
| 853 | + }))).forEach(function (var_name) { | |
| 854 | + if (keys.indexOf(var_name) === -1) { | |
| 855 | + keys.push(var_name); | |
| 856 | + } | |
| 857 | + }); | |
| 858 | + return keys; | |
| 859 | +} | |
| 860 | +function wpbc_bfb_global_form_style__sync_controls(options) { | |
| 861 | + const is_custom = 'custom' === String(options && options.booking_form_style ? options.booking_form_style : ''); | |
| 862 | + const accent_enabled = 'On' === String(options && options.booking_form_accent_enabled ? options.booking_form_accent_enabled : 'Off'); | |
| 863 | + const reset_row = document.querySelector('[data-wpbc-bfb-custom-appearance-reset-row]'); | |
| 864 | + wpbc_bfb_form_appearance__set_radio_control('booking_form_style', options.booking_form_style || 'light_bordered'); | |
| 865 | + document.querySelectorAll('.wpbc_bfb__form_setting_global_custom_style').forEach(function (row) { | |
| 866 | + row.hidden = !is_custom; | |
| 867 | + row.setAttribute('aria-hidden', is_custom ? 'false' : 'true'); | |
| 868 | + row.classList.toggle('is-hidden', !is_custom); | |
| 869 | + }); | |
| 870 | + document.querySelectorAll('.wpbc_bfb__form_setting_global_accent_dependent').forEach(function (row) { | |
| 871 | + row.hidden = !accent_enabled; | |
| 872 | + row.setAttribute('aria-hidden', accent_enabled ? 'false' : 'true'); | |
| 873 | + row.classList.toggle('is-hidden', !accent_enabled); | |
| 874 | + }); | |
| 875 | + if (reset_row) { | |
| 876 | + reset_row.hidden = !is_custom; | |
| 877 | + reset_row.setAttribute('aria-hidden', is_custom ? 'false' : 'true'); | |
| 878 | + reset_row.classList.toggle('is-hidden', !is_custom); | |
| 879 | + } | |
| 880 | +} | |
| 881 | +function wpbc_bfb_global_form_style__apply(value, ctx) { | |
| 882 | + const options = wpbc_bfb_global_form_style__get_current_options(ctx, ctx && ctx.key, value); | |
| 883 | + const style = String(options.booking_form_style || 'light_bordered'); | |
| 884 | + const presets = wpbc_bfb_global_form_style__get_presets(); | |
| 885 | + const preset = presets[style] || presets.light_bordered || {}; | |
| 886 | + const css_vars = wpbc_bfb_global_form_style__resolve_css_vars(options); | |
| 887 | + // Form Style is global. Always start at the complete Builder theme scope so | |
| 888 | + // inline Custom tokens on an outer wrapper cannot leak into a preset when a | |
| 889 | + // field-level update provides only the inner canvas in ctx.canvas. | |
| 890 | + const root = document.getElementById('wpbc_bfb__theme_scope') || ctx && ctx.canvas || document; | |
| 891 | + const theme_classes = []; | |
| 892 | + const css_var_keys = wpbc_bfb_global_form_style__get_css_var_keys(options); | |
| 893 | + wpbc_bfb_global_form_style__sync_controls(options); | |
| 894 | + Object.keys(presets).forEach(function (preset_key) { | |
| 895 | + const class_name = presets[preset_key] && presets[preset_key].theme_class ? String(presets[preset_key].theme_class) : ''; | |
| 896 | + if (class_name && theme_classes.indexOf(class_name) === -1) { | |
| 897 | + theme_classes.push(class_name); | |
| 898 | + } | |
| 899 | + }); | |
| 900 | + if (!root || !root.querySelectorAll) { | |
| 901 | + return; | |
| 902 | + } | |
| 903 | + const selector = '.wpbc_container.wpbc_form, .wpbc_bfb_form, .wpbc_bfb__pages_panel, .wpbc_bfb__form_preview_section_container'; | |
| 904 | + const wraps = []; | |
| 905 | + if (root.matches && root.matches(selector)) { | |
| 906 | + wraps.push(root); | |
| 907 | + } | |
| 908 | + root.querySelectorAll(selector).forEach(function (wrap) { | |
| 909 | + wraps.push(wrap); | |
| 910 | + }); | |
| 911 | + wraps.forEach(function (wrap) { | |
| 912 | + if (!wrap || !wrap.style) { | |
| 913 | + return; | |
| 914 | + } | |
| 915 | + theme_classes.forEach(function (class_name) { | |
| 916 | + wrap.classList.remove(class_name); | |
| 917 | + }); | |
| 918 | + if (preset.theme_class) { | |
| 919 | + wrap.classList.add(String(preset.theme_class)); | |
| 920 | + } | |
| 921 | + wrap.classList.toggle('wpbc_bfb_form_appearance_custom', 'custom' === style); | |
| 922 | + css_var_keys.forEach(function (css_key) { | |
| 923 | + wrap.style.removeProperty(css_key); | |
| 924 | + }); | |
| 925 | + Object.keys(css_vars).forEach(function (css_key) { | |
| 926 | + wrap.style.setProperty(css_key, css_vars[css_key]); | |
| 927 | + }); | |
| 928 | + }); | |
| 929 | +} | |
| 930 | +['booking_form_style', 'booking_form_accent_enabled', 'booking_form_accent_color', 'booking_form_custom_background_color', 'booking_form_custom_border_color', 'booking_form_custom_border_width', 'booking_form_custom_border_radius', 'booking_form_custom_padding_vertical', 'booking_form_custom_padding_horizontal', 'booking_form_custom_text_color', 'booking_form_custom_field_background_color', 'booking_form_custom_field_text_color', 'booking_form_custom_field_border_color', 'booking_form_custom_button_background_color', 'booking_form_custom_button_text_color', 'booking_form_custom_button_border_color', 'booking_form_custom_button_hover_background_color', 'booking_form_custom_button_hover_text_color', 'booking_form_custom_button_hover_border_color', 'booking_form_custom_secondary_button_background_color', 'booking_form_custom_secondary_button_text_color', 'booking_form_custom_secondary_button_border_color', 'booking_form_custom_secondary_button_hover_background_color', 'booking_form_custom_secondary_button_hover_text_color', 'booking_form_custom_secondary_button_hover_border_color', 'booking_form_custom_button_border_width', 'booking_form_custom_button_border_radius'].forEach(function (key) { | |
| 931 | + WPBC_BFB_Settings_Effects.register(key, function (value, ctx) { | |
| 932 | + wpbc_bfb_global_form_style__apply(value, Object.assign({}, ctx || {}, { | |
| 933 | + key: key | |
| 934 | + })); | |
| 935 | + }); | |
| 936 | +}); | |
| 937 | +function wpbc_bfb_form_appearance__sync_custom_controls_from_ui() { | |
| 938 | + const options = wpbc_bfb_global_form_style__get_current_options(); | |
| 939 | + wpbc_bfb_global_form_style__sync_controls(options); | |
| 940 | + wpbc_bfb_global_form_style__apply(null, { | |
| 941 | + source: 'sync-global-style' | |
| 942 | + }); | |
| 943 | +} | |
| 944 | +wpbc_bfb_form_appearance__sync_custom_controls_from_ui(); | |
| 945 | +document.addEventListener('DOMContentLoaded', wpbc_bfb_form_appearance__sync_custom_controls_from_ui); | |
| 946 | + | |
| 236 | 947 | // BOOKING_FORM_THEME. |
| 237 | 948 | WPBC_BFB_Settings_Effects.register('booking_form_theme', function (value, ctx) { |
| 238 | - // const root = ctx.canvas; | |
| 239 | - const root = document.getElementById('wpbc_bfb__theme_scope'); | |
| 949 | + const root = ctx && ctx.canvas || document.getElementById('wpbc_bfb__theme_scope') || document; | |
| 240 | 950 | if (!root || !root.querySelectorAll) { |
| 241 | 951 | return; |
| 242 | 952 | } |
| 243 | - | |
| 244 | - // const wraps = root.querySelectorAll( '.wpbc_container.wpbc_form' ); | |
| 245 | - const wraps = root.querySelectorAll('.wpbc_bfb__pages_panel'); | |
| 953 | + if (wpbc_bfb_form_appearance__is_user_theme_switch(ctx)) { | |
| 954 | + const current_options = wpbc_bfb_form_appearance__get_current_options(); | |
| 955 | + if ('custom' === String(current_options.booking_form_container_style || '')) { | |
| 956 | + current_options.booking_form_theme = value; | |
| 957 | + wpbc_bfb_form_appearance__sync_form_style_control(current_options); | |
| 958 | + wpbc_bfb_form_appearance__apply_vars('custom', Object.assign({}, ctx || {}, { | |
| 959 | + key: 'booking_form_container_style', | |
| 960 | + source: 'theme-base-custom', | |
| 961 | + options: current_options | |
| 962 | + })); | |
| 963 | + } else { | |
| 964 | + wpbc_bfb_form_appearance__set_container_style_control('bordered'); | |
| 965 | + wpbc_bfb_form_appearance__apply_vars('bordered', Object.assign({}, ctx || {}, { | |
| 966 | + key: 'booking_form_container_style' | |
| 967 | + })); | |
| 968 | + } | |
| 969 | + } else if (ctx && ctx.options) { | |
| 970 | + wpbc_bfb_form_appearance__sync_form_style_control(ctx.options); | |
| 971 | + } | |
| 972 | + const theme_selector = '.wpbc_container.wpbc_form, .wpbc_bfb_form, .wpbc_bfb__pages_panel'; | |
| 973 | + const wraps = []; | |
| 974 | + if (root.matches && root.matches(theme_selector)) { | |
| 975 | + wraps.push(root); | |
| 976 | + } | |
| 977 | + root.querySelectorAll(theme_selector).forEach(function (wrap) { | |
| 978 | + wraps.push(wrap); | |
| 979 | + }); | |
| 246 | 980 | if (!wraps.length) { |
| 247 | 981 | return; |
| 248 | 982 | } |
| 249 | 983 | wraps.forEach(function (wrap) { |
| @@ -271,9 +1005,9 @@ | ||
| 271 | 1005 | } |
| 272 | 1006 | const v = String(value == null ? '' : value).trim(); |
| 273 | 1007 | |
| 274 | 1008 | // allow only "number + unit". |
| 275 | - if (v && !/^-?\d+(?:\.\d+)?(?:%|px|rem|em|vw|vh)$/.test(v)) { | |
| 1009 | + if (v && !/^\d+(?:\.\d+)?(?:%|px|rem|em|vw|vh)$/.test(v)) { | |
| 276 | 1010 | return; |
| 277 | 1011 | } |
| 278 | 1012 | wraps.forEach(function (wrap) { |
| 279 | 1013 | if (!wrap || !wrap.style) { |
| @@ -299,12 +1033,12 @@ | ||
| 299 | 1033 | } |
| 300 | 1034 | |
| 301 | 1035 | // Get builder async. |
| 302 | 1036 | wpbc_bfb_api.with_builder(function (Builder) { |
| 303 | - /** | |
| 304 | - * Capture active right sidebar tab and return restore handle. | |
| 305 | - * | |
| 306 | - * @return {{restore:function():void}|null} | |
| 1037 | + /** | |
| 1038 | + * Capture active right sidebar tab and return restore handle. | |
| 1039 | + * | |
| 1040 | + * @return {{restore:function():void}|null} | |
| 307 | 1041 | */ |
| 308 | 1042 | function capture_right_sidebar_active_tab_restore_handle() { |
| 309 | 1043 | var tablist_el = document.querySelector('.wpbc_bfb__rightbar_tabs[role="tablist"]'); |
| 310 | 1044 | if (!tablist_el) { |
| @@ -356,5 +1090,5 @@ | ||
| 356 | 1090 | source: 'settings-effects' |
| 357 | 1091 | }); |
| 358 | 1092 | }); |
| 359 | 1093 | }); |
| 360 | -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1zZXR0aW5ncy9fb3V0L3NldHRpbmdzX2VmZmVjdHMuanMiLCJuYW1lcyI6WyJ3IiwiZCIsIkVmZmVjdHMiLCJXUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzIiwibWFwIiwiT2JqZWN0IiwiY3JlYXRlIiwicmVnaXN0ZXIiLCJrZXkiLCJmbiIsIlN0cmluZyIsImdldF9jYW52YXNfcm9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRFbGVtZW50QnlJZCIsImJvZHkiLCJkb2N1bWVudEVsZW1lbnQiLCJhcHBseV9vbmUiLCJ2YWx1ZSIsImN0eCIsImFzc2lnbiIsImNhbnZhcyIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJhcHBseV9hbGwiLCJvcHRpb25zIiwia2V5cyIsImZvckVhY2giLCJrIiwibm9ybWFsaXplX3BhY2siLCJwYWNrIiwiSlNPTiIsInBhcnNlIiwiX2UiLCJoYXNfc2hhcGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJjc3NfdmFycyIsImJmYl9vcHRpb25zIiwicmVhcHBseV9hZnRlcl9jYW52YXMiLCJzZXR0aW5nc19wYWNrIiwic291cmNlIiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkZXRhaWwiLCJzZXR0aW5ncyIsImNzc19lc2NhcGUiLCJ2IiwiQ1NTIiwiZXNjYXBlIiwicmVwbGFjZSIsImZpbmRfZnNfcm9vdCIsImVsIiwiY2xvc2VzdCIsImRpcmVjdCIsImxlbl9ncm91cCIsInJhbmdlX2dyb3VwIiwicmVhZF92YWx1ZV9mcm9tX2ZzX3Jvb3QiLCJmc19yb290Iiwib3JpZ2luYWxfdGFyZ2V0IiwiZnNfdHlwZSIsImdldEF0dHJpYnV0ZSIsImNvbnRyb2xfaWQiLCJzZWxlY3RvciIsImNoZWNrZWQiLCJ0eXBlIiwiY2IiLCJvbl9jaGFuZ2UiLCJldiIsImlzVHJ1c3RlZCIsInRhcmdldCIsInRhZyIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsInVzZV9jaGFuZ2UiLCJzY29wZSIsImNvbnRyb2wiLCJ3aW5kb3ciLCJkb2N1bWVudCIsInJvb3QiLCJxdWVyeVNlbGVjdG9yQWxsIiwid3JhcHMiLCJsZW5ndGgiLCJ3cmFwIiwiQXJyYXkiLCJmcm9tIiwiY2xhc3NMaXN0IiwiY2xzIiwidGVzdCIsInJlbW92ZSIsImFkZCIsInRyaW0iLCJzdHlsZSIsInJlbW92ZVByb3BlcnR5Iiwic2V0UHJvcGVydHkiLCJ3cGJjX2JmYl9hcGkiLCJ3aXRoX2J1aWxkZXIiLCJCdWlsZGVyIiwiY2FwdHVyZV9yaWdodF9zaWRlYmFyX2FjdGl2ZV90YWJfcmVzdG9yZV9oYW5kbGUiLCJ0YWJsaXN0X2VsIiwiYWN0aXZlX3RhYl9lbCIsImNsaWNrIiwicmVzdG9yZSIsInRhYl9yZXN0b3JlX2hhbmRsZSIsInJlc3RvcmVkIiwiRVZTIiwiV1BCQ19CRkJfQ29yZSIsIldQQkNfQkZCX0V2ZW50cyIsIkVWX0RPTkUiLCJTVFJVQ1RVUkVfTE9BREVEIiwiQ0FOVkFTX1JFRlJFU0hFRCIsImRvX3Jlc3RvcmUiLCJidXMiLCJvZmYiLCJfIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwib24iLCJlbmFibGVkIiwic2V0X3ByZXZpZXdfbW9kZSIsInJlYnVpbGQiLCJyZWluaXQiXSwic291cmNlcyI6WyJpbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9mb3JtLXNldHRpbmdzL19zcmMvc2V0dGluZ3NfZWZmZWN0cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQXBwbGllcyBlZmZlY3RzIGluIENhbnZhcywgYWZ0ZXIgY2hhbmdpbmcgc29tZSBzZXR0aW5ncyBpbiB0aGUgcmlnaHQgc2lkZWJhciBpbiBCRkIuXHJcbiAqXHJcbiAqIEBmaWxlIC4uL2luY2x1ZGVzL3BhZ2UtZm9ybS1idWlsZGVyL2Zvcm0tc2V0dGluZ3MvX3NyYy9zZXR0aW5nc19lZmZlY3RzLmpzXHJcbiAqL1xyXG4oZnVuY3Rpb24gKHcsIGQpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdGNvbnN0IEVmZmVjdHMgPSAody5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzID0gdy5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzIHx8IHt9KTtcclxuXHRjb25zdCBtYXAgICAgID0gKEVmZmVjdHMubWFwID0gRWZmZWN0cy5tYXAgfHwgT2JqZWN0LmNyZWF0ZSggbnVsbCApKTtcclxuXHJcblx0RWZmZWN0cy5yZWdpc3RlciA9IGZ1bmN0aW9uIChrZXksIGZuKSB7XHJcblx0XHRpZiAoIGtleSAmJiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdG1hcFtTdHJpbmcoIGtleSApXSA9IGZuO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdGZ1bmN0aW9uIGdldF9jYW52YXNfcm9vdCgpIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGQucXVlcnlTZWxlY3RvciggJyN3cGJjX2JmYl9fcGFnZXNfY29udGFpbmVyJyApIHx8XHJcblx0XHRcdGQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcnICkgfHxcclxuXHRcdFx0ZC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19wcmV2aWV3JyApIHx8XHJcblx0XHRcdGQuYm9keSB8fCBkLmRvY3VtZW50RWxlbWVudFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdEVmZmVjdHMuYXBwbHlfb25lID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGN0eCkge1xyXG5cdFx0Y29uc3QgZm4gPSBtYXBbU3RyaW5nKCBrZXkgKV07XHJcblx0XHRpZiAoICEgZm4gKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRyeSB7XHJcblx0XHRcdGZuKCB2YWx1ZSwgT2JqZWN0LmFzc2lnbiggeyBrZXksIHZhbHVlLCBjYW52YXM6IGdldF9jYW52YXNfcm9vdCgpIH0sIGN0eCB8fCB7fSApICk7XHJcblx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0Ly8ga2VlcCBzaWxlbnQgaW4gcHJvZHVjdGlvbiBpZiB5b3UgcHJlZmVyXHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoICdXUEJDIEVmZmVjdHMgZXJyb3I6Jywga2V5LCBlICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0RWZmZWN0cy5hcHBseV9hbGwgPSBmdW5jdGlvbiAob3B0aW9ucywgY3R4KSB7XHJcblx0XHRpZiAoICEgb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdE9iamVjdC5rZXlzKCBvcHRpb25zICkuZm9yRWFjaCggZnVuY3Rpb24gKGspIHtcclxuXHRcdFx0RWZmZWN0cy5hcHBseV9vbmUoIGssIG9wdGlvbnNba10sIGN0eCApO1xyXG5cdFx0fSApO1xyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5vcm1hbGl6ZSBzZXR0aW5ncyBwYWNrIHRvIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHNoYXBlOlxyXG5cdCAqIHsgb3B0aW9uczoge30sIGNzc192YXJzOiB7fSB9XHJcblx0ICpcclxuXHQgKiBAcGFyYW0geyp9IHBhY2tcclxuXHQgKiBAcmV0dXJuIHt7b3B0aW9uczpPYmplY3QsIGNzc192YXJzOk9iamVjdCwgYmZiX29wdGlvbnM/Ok9iamVjdH18bnVsbH1cclxuXHQgKi9cclxuXHRFZmZlY3RzLm5vcm1hbGl6ZV9wYWNrID0gZnVuY3Rpb24gKHBhY2spIHtcclxuXHJcblx0XHRpZiAoIHBhY2sgPT09IG51bGwgfHwgdHlwZW9mIHBhY2sgPT09ICd1bmRlZmluZWQnIHx8IHBhY2sgPT09ICcnICkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBQYXJzZSBKU09OIHN0cmluZyBpZiBuZWVkZWQuXHJcblx0XHRpZiAoIHR5cGVvZiBwYWNrID09PSAnc3RyaW5nJyApIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRwYWNrID0gSlNPTi5wYXJzZSggcGFjayApO1xyXG5cdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICEgcGFjayB8fCB0eXBlb2YgcGFjayAhPT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIElmIHVzZXIgcGFzc2VkIGp1c3Qge2tleTp2YWx1ZX0gb3B0aW9ucyBtYXAsIHdyYXAgaXQuXHJcblx0XHRjb25zdCBoYXNfc2hhcGUgPVxyXG5cdFx0XHRcdCAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwYWNrLCAnb3B0aW9ucycgKSB8fFxyXG5cdFx0XHRcdCAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwYWNrLCAnY3NzX3ZhcnMnICkgfHxcclxuXHRcdFx0XHQgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggcGFjaywgJ2JmYl9vcHRpb25zJyApO1xyXG5cclxuXHRcdGlmICggISBoYXNfc2hhcGUgKSB7XHJcblx0XHRcdHBhY2sgPSB7IG9wdGlvbnM6IHBhY2ssIGNzc192YXJzOiB7fSB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggISBwYWNrLm9wdGlvbnMgfHwgdHlwZW9mIHBhY2sub3B0aW9ucyAhPT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdHBhY2sub3B0aW9ucyA9IHt9O1xyXG5cdFx0fVxyXG5cdFx0aWYgKCAhIHBhY2suY3NzX3ZhcnMgfHwgdHlwZW9mIHBhY2suY3NzX3ZhcnMgIT09ICdvYmplY3QnICkge1xyXG5cdFx0XHRwYWNrLmNzc192YXJzID0ge307XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gYmZiX29wdGlvbnMgaXMgb3B0aW9uYWw7IGtlZXAgaWYgdmFsaWQuXHJcblx0XHRpZiAoIHBhY2suYmZiX29wdGlvbnMgJiYgdHlwZW9mIHBhY2suYmZiX29wdGlvbnMgIT09ICdvYmplY3QnICkge1xyXG5cdFx0XHRkZWxldGUgcGFjay5iZmJfb3B0aW9ucztcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcGFjaztcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBSZS1hcHBseSBzZXR0aW5ncyBlZmZlY3RzIGFmdGVyIGEgY2FudmFzIHJlYnVpbGQgLyBzdHJ1Y3R1cmUgbG9hZC5cclxuXHQgKlxyXG5cdCAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc3RydWN0dXJlIGxvYWRpbmcgY2FuIHJlcGxhY2UgRE9NIG5vZGVzIHRoYXQgZWZmZWN0cyB0YXJnZXQuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0geyp9IHNldHRpbmdzX3BhY2sgIHN0cmluZ3xvYmplY3Qgc2V0dGluZ3NfanNvbiBwYWNrIChvciBwbGFpbiBvcHRpb25zIG1hcClcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gW2N0eF1cclxuXHQgKi9cclxuXHRFZmZlY3RzLnJlYXBwbHlfYWZ0ZXJfY2FudmFzID0gZnVuY3Rpb24gKHNldHRpbmdzX3BhY2ssIGN0eCkge1xyXG5cclxuXHRcdGNvbnN0IHBhY2sgPSBFZmZlY3RzLm5vcm1hbGl6ZV9wYWNrKCBzZXR0aW5nc19wYWNrICk7XHJcblx0XHRpZiAoICEgcGFjayApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFwcGx5IGltbWVkaWF0ZWx5IChiZXN0IGVmZm9ydCkuXHJcblx0XHRFZmZlY3RzLmFwcGx5X2FsbCggcGFjay5vcHRpb25zLCBPYmplY3QuYXNzaWduKCB7IHNvdXJjZTogJ3JlYXBwbHlfYWZ0ZXJfY2FudmFzJyB9LCBjdHggfHwge30gKSApO1xyXG5cclxuXHRcdC8vIFNvbWUgbW9kdWxlcy9oeWRyYXRpb24gbWF5IHJ1biBzaG9ydGx5IGFmdGVyOyBkbyBvbmUgbW9yZSBwYXNzLlxyXG5cdFx0c2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRFZmZlY3RzLmFwcGx5X2FsbCggcGFjay5vcHRpb25zLCBPYmplY3QuYXNzaWduKCB7IHNvdXJjZTogJ3JlYXBwbHlfYWZ0ZXJfY2FudmFzX2RlbGF5ZWQnIH0sIGN0eCB8fCB7fSApICk7XHJcblx0XHR9LCA2MCApO1xyXG5cdH07XHJcblxyXG5cdC8vIDEpIEFwcGx5IGZyb20gQUpBWCBsb2FkLlxyXG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmM6YmZiOmZvcm1fc2V0dGluZ3M6YXBwbHknLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0Y29uc3QgcGFjayA9IGUgJiYgZS5kZXRhaWwgPyBlLmRldGFpbC5zZXR0aW5ncyA6IG51bGw7XHJcblx0XHRpZiAoIHBhY2sgJiYgcGFjay5vcHRpb25zICkge1xyXG5cdFx0XHRFZmZlY3RzLmFwcGx5X2FsbCggcGFjay5vcHRpb25zLCB7IHNvdXJjZTogJ2FwcGx5JyB9ICk7XHJcblx0XHR9XHJcblx0fSApO1xyXG5cclxuXHQvLyAyKSBBcHBseSBsaXZlIGZyb20gVUkgY2hhbmdlIChkZWxlZ2F0ZWQpLlxyXG5cdGZ1bmN0aW9uIGNzc19lc2NhcGUodmFsdWUpIHtcclxuXHRcdGNvbnN0IHYgPSBTdHJpbmcoIHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlICk7XHJcblx0XHRpZiAoIHcuQ1NTICYmIHR5cGVvZiB3LkNTUy5lc2NhcGUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdHJldHVybiB3LkNTUy5lc2NhcGUoIHYgKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2LnJlcGxhY2UoIC9bXmEtekEtWjAtOV9cXC1dL2csICdcXFxcJCYnICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBmaW5kX2ZzX3Jvb3QoZWwpIHtcclxuXHRcdGlmICggISBlbCB8fCAhIGVsLmNsb3Nlc3QgKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIDEpIERpcmVjdDogZWxlbWVudCBvciBhbmNlc3RvciBjYXJyaWVzIEZTIGtleSAoaW5wdXQvc2VsZWN0L3RleHRhcmVhIHdyaXRlciwgcmFkaW8gd3JhcHBlciwgZXRjLilcclxuXHRcdGNvbnN0IGRpcmVjdCA9IGVsLmNsb3Nlc3QoICdbZGF0YS13cGJjLWJmYi1mcy1rZXldJyApO1xyXG5cdFx0aWYgKCBkaXJlY3QgKSB7XHJcblx0XHRcdHJldHVybiBkaXJlY3Q7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gMikgTGVuZ3RoOiBldmVudCBjYW1lIGZyb20gbnVtYmVyL3VuaXQvcmFuZ2UgaW5zaWRlIC53cGJjX3NsaWRlcl9sZW5fZ3JvdXBcclxuXHRcdGNvbnN0IGxlbl9ncm91cCA9IGVsLmNsb3Nlc3QoICcud3BiY19zbGlkZXJfbGVuX2dyb3VwJyApO1xyXG5cdFx0aWYgKCBsZW5fZ3JvdXAgKSB7XHJcblx0XHRcdHJldHVybiAoXHJcblx0XHRcdFx0bGVuX2dyb3VwLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmNfc2xpZGVyX2xlbl93cml0ZXJdW2RhdGEtd3BiYy1iZmItZnMta2V5XScgKSB8fFxyXG5cdFx0XHRcdGxlbl9ncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjLWJmYi1mcy10eXBlPVwibGVuZ3RoXCJdW2RhdGEtd3BiYy1iZmItZnMta2V5XScgKSB8fFxyXG5cdFx0XHRcdG51bGxcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAzKSBSYW5nZTogZXZlbnQgY2FtZSBmcm9tIHJhbmdlIGlucHV0IGluc2lkZSAud3BiY19zbGlkZXJfcmFuZ2VfZ3JvdXBcclxuXHRcdGNvbnN0IHJhbmdlX2dyb3VwID0gZWwuY2xvc2VzdCggJy53cGJjX3NsaWRlcl9yYW5nZV9ncm91cCcgKTtcclxuXHRcdGlmICggcmFuZ2VfZ3JvdXAgKSB7XHJcblx0XHRcdHJldHVybiAoXHJcblx0XHRcdFx0cmFuZ2VfZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zbGlkZXJfcmFuZ2Vfd3JpdGVyXVtkYXRhLXdwYmMtYmZiLWZzLWtleV0nICkgfHxcclxuXHRcdFx0XHRyYW5nZV9ncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjX3NsaWRlcl9yYW5nZV93cml0ZXJdJyApIHx8XHJcblx0XHRcdFx0bnVsbFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcmVhZF92YWx1ZV9mcm9tX2ZzX3Jvb3QoZnNfcm9vdCwgb3JpZ2luYWxfdGFyZ2V0KSB7XHJcblx0XHRpZiAoICEgZnNfcm9vdCApIHtcclxuXHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGZzX3R5cGUgPSBTdHJpbmcoIGZzX3Jvb3QuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1mcy10eXBlJyApIHx8ICcnICk7XHJcblxyXG5cdFx0Ly8gUkFESU86IHJlYWQgY2hlY2tlZCB3aXRoaW4gd3JhcHBlci5cclxuXHRcdGlmICggZnNfdHlwZSA9PT0gJ3JhZGlvJyApIHtcclxuXHRcdFx0Y29uc3QgY29udHJvbF9pZCA9IGZzX3Jvb3QuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1mcy1jb250cm9saWQnICkgfHwgJyc7XHJcblx0XHRcdGNvbnN0IHNlbGVjdG9yICAgPSBjb250cm9sX2lkXHJcblx0XHRcdFx0PyAnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInICsgY3NzX2VzY2FwZSggY29udHJvbF9pZCApICsgJ1wiXTpjaGVja2VkJ1xyXG5cdFx0XHRcdDogJ2lucHV0W3R5cGU9XCJyYWRpb1wiXTpjaGVja2VkJztcclxuXHJcblx0XHRcdGNvbnN0IGNoZWNrZWQgPSBmc19yb290LnF1ZXJ5U2VsZWN0b3IoIHNlbGVjdG9yICk7XHJcblx0XHRcdHJldHVybiBjaGVja2VkID8gU3RyaW5nKCBjaGVja2VkLnZhbHVlIHx8ICcnICkgOiAnJztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDSEVDS0JPWCAvIFRPR0dMRVxyXG5cdFx0aWYgKCAob3JpZ2luYWxfdGFyZ2V0ICYmIG9yaWdpbmFsX3RhcmdldC50eXBlID09PSAnY2hlY2tib3gnKSB8fCBmc19yb290LnR5cGUgPT09ICdjaGVja2JveCcgKSB7XHJcblx0XHRcdGNvbnN0IGNiID0gKG9yaWdpbmFsX3RhcmdldCAmJiBvcmlnaW5hbF90YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94JykgPyBvcmlnaW5hbF90YXJnZXQgOiBmc19yb290O1xyXG5cdFx0XHRyZXR1cm4gY2IuY2hlY2tlZCA/ICdPbicgOiAnT2ZmJztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBERUZBVUxUOiB3cml0ZXIvaW5wdXQvdGV4dGFyZWEvc2VsZWN0XHJcblx0XHRpZiAoIGZzX3Jvb3QudmFsdWUgIT0gbnVsbCApIHtcclxuXHRcdFx0cmV0dXJuIFN0cmluZyggZnNfcm9vdC52YWx1ZSApO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBvcmlnaW5hbF90YXJnZXQgJiYgb3JpZ2luYWxfdGFyZ2V0LnZhbHVlICE9IG51bGwgKSB7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIG9yaWdpbmFsX3RhcmdldC52YWx1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAnJztcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIG9uX2NoYW5nZShldikge1xyXG5cdFx0Ly8gSWdub3JlIGV2ZW50cyBkaXNwYXRjaGVkIGJ5IGNvZGUgKGFwcGx5L3JlYXBwbHksIHNsaWRlciBzeW5jLCBldGMuKS4gRWZmZWN0cyBzaG91bGQgcmVhY3Qgb25seSB0byByZWFsIHVzZXIgaW5wdXQgKyBleHBsaWNpdCB3cGJjOmJmYjpmb3JtX3NldHRpbmdzOmFwcGx5LlxyXG5cdFx0aWYgKCBldiAmJiBldi5pc1RydXN0ZWQgPT09IGZhbHNlICkgeyByZXR1cm47IH1cclxuXHRcdGNvbnN0IHRhcmdldCA9IGV2ICYmIGV2LnRhcmdldDtcclxuXHRcdGlmICggISB0YXJnZXQgKSB7IHJldHVybjsgfVxyXG5cclxuXHRcdGNvbnN0IGZzX3Jvb3QgPSBmaW5kX2ZzX3Jvb3QoIHRhcmdldCApO1xyXG5cdFx0aWYgKCAhIGZzX3Jvb3QgKSB7IHJldHVybjsgfVxyXG5cclxuXHJcblx0XHQvLyBOb3JtYWxpemUgZXZlbnRzIHNvIGVhY2ggY29udHJvbCBwcm9kdWNlcyBleGFjdGx5IG9uZSBlZmZlY3QgY2FsbC5cclxuXHRcdC8vIC0gdG9nZ2xlL3NlbGVjdC9yYWRpby9jaGVja2JveCA9PiBcImNoYW5nZVwiIG9ubHkuXHJcblx0XHQvLyAtIGV2ZXJ5dGhpbmcgZWxzZSAgICAgICAgICAgICAgPT4gXCJpbnB1dFwiIG9ubHkuXHJcblx0XHRjb25zdCBmc190eXBlID0gU3RyaW5nKCBmc19yb290LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItZnMtdHlwZScgKSB8fCAnJyApO1xyXG5cdFx0Y29uc3QgdGFnICAgICA9IFN0cmluZyggdGFyZ2V0LnRhZ05hbWUgfHwgJycgKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0Y29uc3QgdHlwZSAgICA9IFN0cmluZyggdGFyZ2V0LnR5cGUgfHwgJycgKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHRcdGNvbnN0IHVzZV9jaGFuZ2UgPSAoZnNfdHlwZSA9PT0gJ3RvZ2dsZScpIHx8IChmc190eXBlID09PSAnc2VsZWN0JykgfHwgKGZzX3R5cGUgPT09ICdyYWRpbycpIHx8ICh0eXBlID09PSAnY2hlY2tib3gnKSB8fCAodHlwZSA9PT0gJ3JhZGlvJykgfHwgKHRhZyA9PT0gJ3NlbGVjdCcpO1xyXG5cclxuXHRcdGlmICggdXNlX2NoYW5nZSAmJiBldi50eXBlICE9PSAnY2hhbmdlJyApIHsgcmV0dXJuOyB9XHJcblx0XHRpZiAoICEgdXNlX2NoYW5nZSAmJiBldi50eXBlICE9PSAnaW5wdXQnICkgeyByZXR1cm47IH1cclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0XHRjb25zdCBrZXkgPSBmc19yb290LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItZnMta2V5JyApO1xyXG5cdFx0aWYgKCAhIGtleSApIHsgcmV0dXJuOyB9XHJcblxyXG5cdFx0Y29uc3Qgc2NvcGUgPSBmc19yb290LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItZnMtc2NvcGUnICkgfHwgJyc7XHJcblx0XHRjb25zdCB2YWx1ZSA9IHJlYWRfdmFsdWVfZnJvbV9mc19yb290KCBmc19yb290LCB0YXJnZXQgKTtcclxuXHJcblx0XHRFZmZlY3RzLmFwcGx5X29uZSgga2V5LCB2YWx1ZSwgeyBzb3VyY2U6ICd1aScsIHNjb3BlOiBzY29wZSwgY29udHJvbDogdGFyZ2V0LCBmc19yb290OiBmc19yb290IH0gKTtcclxuXHR9XHJcblxyXG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0Jywgb25fY2hhbmdlLCBmYWxzZSApO1xyXG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIG9uX2NoYW5nZSwgZmFsc2UgKTtcclxuXHJcbn0pKCB3aW5kb3csIGRvY3VtZW50ICk7XHJcblxyXG5cclxuLy8gQk9PS0lOR19GT1JNX1RIRU1FLlxyXG5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzLnJlZ2lzdGVyKCAnYm9va2luZ19mb3JtX3RoZW1lJywgZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcclxuXHQvLyBjb25zdCByb290ID0gY3R4LmNhbnZhcztcclxuXHRjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9fdGhlbWVfc2NvcGUnICk7XHJcblx0aWYgKCAhIHJvb3QgfHwgISByb290LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHQvLyBjb25zdCB3cmFwcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2NvbnRhaW5lci53cGJjX2Zvcm0nICk7XHJcblx0Y29uc3Qgd3JhcHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3BhZ2VzX3BhbmVsJyApO1xyXG5cdGlmICggISB3cmFwcy5sZW5ndGggKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHR3cmFwcy5mb3JFYWNoKCBmdW5jdGlvbiAod3JhcCkge1xyXG5cdFx0Ly8gcmVtb3ZlIGFueSBwcmV2aW91cyB0aGVtZSBjbGFzc2VzIChzaW1wbGUgKyBmdXR1cmUtcHJvb2YpLlxyXG5cdFx0QXJyYXkuZnJvbSggd3JhcC5jbGFzc0xpc3QgKS5mb3JFYWNoKCBmdW5jdGlvbiAoY2xzKSB7XHJcblx0XHRcdGlmICggL153cGJjX3RoZW1lXy8udGVzdCggY2xzICkgKSB7XHJcblx0XHRcdFx0d3JhcC5jbGFzc0xpc3QucmVtb3ZlKCBjbHMgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSApO1xyXG5cclxuXHRcdGlmICggdmFsdWUgKSB7XHJcblx0XHRcdHdyYXAuY2xhc3NMaXN0LmFkZCggU3RyaW5nKCB2YWx1ZSApICk7XHJcblx0XHR9XHJcblx0fSApO1xyXG59ICk7XHJcblxyXG5cclxuLy8gQk9PS0lOR19GT1JNX0xBWU9VVF9XSURUSCDigJQgRm9ybSB3aWR0aDogYXBwbGllcyBjb21iaW5lZCBcIjEwMCVcIiAvIFwiNjAwcHhcIiAvIFwiNDByZW1cIiB0byB0aGUgYm9va2luZyBmb3JtIGNvbnRhaW5lcnMuXHJcbldQQkNfQkZCX1NldHRpbmdzX0VmZmVjdHMucmVnaXN0ZXIoICdib29raW5nX2Zvcm1fbGF5b3V0X3dpZHRoJywgZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcclxuXHRjb25zdCByb290ID0gY3R4ICYmIGN0eC5jYW52YXM7XHJcblx0aWYgKCAhIHJvb3QgfHwgISByb290LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCB3cmFwcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fZm9ybV9wcmV2aWV3X3NlY3Rpb25fY29udGFpbmVyJyApO1xyXG5cdGlmICggISB3cmFwcy5sZW5ndGggKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCB2ID0gU3RyaW5nKCB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSApLnRyaW0oKTtcclxuXHJcblx0Ly8gYWxsb3cgb25seSBcIm51bWJlciArIHVuaXRcIi5cclxuXHRpZiAoIHYgJiYgISAvXi0/XFxkKyg/OlxcLlxcZCspPyg/OiV8cHh8cmVtfGVtfHZ3fHZoKSQvLnRlc3QoIHYgKSApIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdHdyYXBzLmZvckVhY2goXHJcblx0XHRmdW5jdGlvbiAod3JhcCkge1xyXG5cdFx0XHRpZiAoICEgd3JhcCB8fCAhIHdyYXAuc3R5bGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoICEgdiApIHtcclxuXHRcdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjLWJmYi1ib29raW5nX2Zvcm1fbGF5b3V0X3dpZHRoJyApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmMtYmZiLWJvb2tpbmdfZm9ybV9sYXlvdXRfd2lkdGgnLCB2ICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHQpO1xyXG59ICk7XHJcblxyXG5cclxuLy8gRGVidWcgUHJldmlldyBNb2RlLlxyXG5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzLnJlZ2lzdGVyKCAnYm9va2luZ19iZmJfcHJldmlld19tb2RlJywgZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcclxuXHRjb25zdCByb290ID0gY3R4LmNhbnZhcztcclxuXHRpZiAoICEgcm9vdCB8fCAhIHJvb3QucXVlcnlTZWxlY3RvckFsbCApIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGNvbnN0IHdyYXBzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfY29udGFpbmVyLndwYmNfZm9ybScgKTtcclxuXHRpZiAoICEgd3JhcHMubGVuZ3RoICkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Ly8gR2V0IGJ1aWxkZXIgYXN5bmMuXHJcblx0d3BiY19iZmJfYXBpLndpdGhfYnVpbGRlcihcclxuXHRcdGZ1bmN0aW9uIChCdWlsZGVyKSB7XHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogQ2FwdHVyZSBhY3RpdmUgcmlnaHQgc2lkZWJhciB0YWIgYW5kIHJldHVybiByZXN0b3JlIGhhbmRsZS5cclxuXHRcdFx0ICpcclxuXHRcdFx0ICogQHJldHVybiB7e3Jlc3RvcmU6ZnVuY3Rpb24oKTp2b2lkfXxudWxsfVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0ZnVuY3Rpb24gY2FwdHVyZV9yaWdodF9zaWRlYmFyX2FjdGl2ZV90YWJfcmVzdG9yZV9oYW5kbGUoKSB7XHJcblxyXG5cdFx0XHRcdHZhciB0YWJsaXN0X2VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fcmlnaHRiYXJfdGFic1tyb2xlPVwidGFibGlzdFwiXScgKTtcclxuXHRcdFx0XHRpZiAoICEgdGFibGlzdF9lbCApIHtcclxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dmFyIGFjdGl2ZV90YWJfZWwgPSB0YWJsaXN0X2VsLnF1ZXJ5U2VsZWN0b3IoICdbcm9sZT1cInRhYlwiXVthcmlhLXNlbGVjdGVkPVwidHJ1ZVwiXScgKTtcclxuXHJcblx0XHRcdFx0aWYgKCAhIGFjdGl2ZV90YWJfZWwgKSB7XHJcblx0XHRcdFx0XHRhY3RpdmVfdGFiX2VsID0gdGFibGlzdF9lbC5xdWVyeVNlbGVjdG9yKCAnW3JvbGU9XCJ0YWJcIl1bYXJpYS1jb250cm9scz1cIndwYmNfYmZiX19wYWxldHRlX2FkZF9uZXdcIl0nICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoICEgYWN0aXZlX3RhYl9lbCB8fCB0eXBlb2YgYWN0aXZlX3RhYl9lbC5jbGljayAhPT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdHJlc3RvcmU6IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0dHJ5IHsgYWN0aXZlX3RhYl9lbC5jbGljaygpOyB9IGNhdGNoICggX2UgKSB7fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciB0YWJfcmVzdG9yZV9oYW5kbGUgPSBjYXB0dXJlX3JpZ2h0X3NpZGViYXJfYWN0aXZlX3RhYl9yZXN0b3JlX2hhbmRsZSgpO1xyXG5cclxuXHRcdFx0bGV0IHJlc3RvcmVkICA9IGZhbHNlO1xyXG5cdFx0XHR2YXIgRVZTICAgICAgPSB3aW5kb3cuV1BCQ19CRkJfQ29yZSAmJiB3aW5kb3cuV1BCQ19CRkJfQ29yZS5XUEJDX0JGQl9FdmVudHMgPyB3aW5kb3cuV1BCQ19CRkJfQ29yZS5XUEJDX0JGQl9FdmVudHMgOiB7fTtcclxuXHRcdFx0dmFyIEVWX0RPTkUgID0gRVZTLlNUUlVDVFVSRV9MT0FERUQgfHwgRVZTLkNBTlZBU19SRUZSRVNIRUQgfHwgJ3dwYmM6YmZiOnN0cnVjdHVyZS1sb2FkZWQnO1xyXG5cclxuXHJcblx0XHRcdGZ1bmN0aW9uIGRvX3Jlc3RvcmUoKSB7XHJcblx0XHRcdFx0aWYgKCByZXN0b3JlZCApIHsgcmV0dXJuOyB9XHJcblx0XHRcdFx0cmVzdG9yZWQgPSB0cnVlO1xyXG5cdFx0XHRcdHRyeSB7IEJ1aWxkZXI/LmJ1cz8ub2ZmPy4oIEVWX0RPTkUsIGRvX3Jlc3RvcmUgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0aWYgKCAhIHRhYl9yZXN0b3JlX2hhbmRsZSApIHsgcmV0dXJuOyB9XHJcblx0XHRcdFx0XHR0YWJfcmVzdG9yZV9oYW5kbGUucmVzdG9yZSgpO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTGlzdGVuIG9uY2UgKGJlc3QpLCBwbHVzIGEgZmFsbGJhY2sgaW4gY2FzZSBldmVudCBpc24ndCBmaXJlZC5cclxuXHRcdFx0dHJ5IHsgQnVpbGRlcj8uYnVzPy5vbj8uKCBFVl9ET05FLCBkb19yZXN0b3JlICk7IH0gY2F0Y2ggKCBfICkge31cclxuXHJcblxyXG5cdFx0XHR2YXIgZW5hYmxlZCA9ICgnT24nID09PSB2YWx1ZSk7XHJcblx0XHRcdEJ1aWxkZXIuc2V0X3ByZXZpZXdfbW9kZSggZW5hYmxlZCwgeyByZWJ1aWxkOiB0cnVlLCByZWluaXQ6IHRydWUsIHNvdXJjZTogJ3NldHRpbmdzLWVmZmVjdHMnIH0gKTtcclxuXHRcdH1cclxuXHQpO1xyXG5cclxufSApO1xyXG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsVUFBVUEsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDaEIsWUFBWTs7RUFFWixNQUFNQyxPQUFPLEdBQUlGLENBQUMsQ0FBQ0cseUJBQXlCLEdBQUdILENBQUMsQ0FBQ0cseUJBQXlCLElBQUksQ0FBQyxDQUFFO0VBQ2pGLE1BQU1DLEdBQUcsR0FBUUYsT0FBTyxDQUFDRSxHQUFHLEdBQUdGLE9BQU8sQ0FBQ0UsR0FBRyxJQUFJQyxNQUFNLENBQUNDLE1BQU0sQ0FBRSxJQUFLLENBQUU7RUFFcEVKLE9BQU8sQ0FBQ0ssUUFBUSxHQUFHLFVBQVVDLEdBQUcsRUFBRUMsRUFBRSxFQUFFO0lBQ3JDLElBQUtELEdBQUcsSUFBSSxPQUFPQyxFQUFFLEtBQUssVUFBVSxFQUFHO01BQ3RDTCxHQUFHLENBQUNNLE1BQU0sQ0FBRUYsR0FBSSxDQUFDLENBQUMsR0FBR0MsRUFBRTtJQUN4QjtFQUNELENBQUM7RUFFRCxTQUFTRSxlQUFlQSxDQUFBLEVBQUc7SUFDMUIsT0FDQ1YsQ0FBQyxDQUFDVyxhQUFhLENBQUUsNEJBQTZCLENBQUMsSUFDL0NYLENBQUMsQ0FBQ1csYUFBYSxDQUFFLDJCQUE0QixDQUFDLElBQzlDWCxDQUFD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 | |
| 1094 | +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1zZXR0aW5ncy9fb3V0L3NldHRpbmdzX2VmZmVjdHMuanMiLCJuYW1lcyI6WyJ3IiwiZCIsIkVmZmVjdHMiLCJXUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzIiwibWFwIiwiT2JqZWN0IiwiY3JlYXRlIiwicmVnaXN0ZXIiLCJrZXkiLCJmbiIsIlN0cmluZyIsImdldF9jYW52YXNfcm9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRFbGVtZW50QnlJZCIsImJvZHkiLCJkb2N1bWVudEVsZW1lbnQiLCJhcHBseV9vbmUiLCJ2YWx1ZSIsImN0eCIsImFzc2lnbiIsImNhbnZhcyIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJhcHBseV9hbGwiLCJvcHRpb25zIiwia2V5cyIsImZvckVhY2giLCJrIiwibm9ybWFsaXplX3BhY2siLCJwYWNrIiwiSlNPTiIsInBhcnNlIiwiX2UiLCJoYXNfc2hhcGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJjc3NfdmFycyIsImJmYl9vcHRpb25zIiwicmVhcHBseV9hZnRlcl9jYW52YXMiLCJzZXR0aW5nc19wYWNrIiwic291cmNlIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2FwcGx5Iiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkZXRhaWwiLCJzZXR0aW5ncyIsImNzc19lc2NhcGUiLCJ2IiwiQ1NTIiwiZXNjYXBlIiwicmVwbGFjZSIsImZpbmRfZnNfcm9vdCIsImVsIiwiY2xvc2VzdCIsImRpcmVjdCIsImxlbl9ncm91cCIsInNwYWNpbmdfZ3JvdXAiLCJyYW5nZV9ncm91cCIsInJlYWRfdmFsdWVfZnJvbV9mc19yb290IiwiZnNfcm9vdCIsIm9yaWdpbmFsX3RhcmdldCIsImZzX3R5cGUiLCJnZXRBdHRyaWJ1dGUiLCJjb250cm9sX2lkIiwic2VsZWN0b3IiLCJjaGVja2VkIiwiZ3JvdXAiLCJ2ZXJ0aWNhbF9pbnB1dCIsImhvcml6b250YWxfaW5wdXQiLCJ3cml0ZXIiLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJjb21iaW5lZCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fbm9ybWFsaXplX3NwYWNpbmdfbnVtYmVycyIsInR5cGUiLCJjYiIsImFwcGx5X2NoYW5nZV9mcm9tX3RhcmdldCIsInRhcmdldCIsImV2ZW50X3R5cGUiLCJldmVudF9zb3VyY2UiLCJ0YWciLCJ0YWdOYW1lIiwidG9Mb3dlckNhc2UiLCJ1c2VfY2hhbmdlIiwic2NvcGUiLCJjb250cm9sIiwiaXNfY29sb3Jpc19jb250cm9sIiwibWF0Y2hlcyIsIm9uX2NoYW5nZSIsImV2IiwiaXNUcnVzdGVkIiwib25fY29sb3Jpc19waWNrIiwiY3VycmVudEVsIiwiaW5wdXQiLCJjb2xvciIsIndpbmRvdyIsImRvY3VtZW50Iiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfcHJlc2V0cyIsImJvcmRlcmVkIiwiYmFja2dyb3VuZCIsImJvcmRlckNvbG9yIiwiYm9yZGVyV2lkdGgiLCJyYWRpdXMiLCJwYWRkaW5nIiwic2hhZG93Iiwibm9uZSIsInNvZnQiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2RhcmtfdGhlbWUiLCJib29raW5nX2Zvcm1fdGhlbWUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9wcmVzZXRfZm9yX29wdGlvbnMiLCJzdHlsZSIsInByZXNldHMiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yIiwiZmFsbGJhY2siLCJ0cmltIiwidGVzdCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfb3B0aW9uYWxfY29sb3IiLCJ3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fc2FuaXRpemVfYWNjZW50X2NvbG9yIiwicmVxdWVzdGVkX2NvbG9yIiwic2V0dGluZ3NfdmFycyIsIndwYmNfYmZiX3NldHRpbmdzX3ZhcnMiLCJhY2NlbnRfZGVmYXVsdHMiLCJmb3JtX2FjY2VudF9kZWZhdWx0cyIsImRlZmF1bHRfY29sb3IiLCJib29raW5nX2Zvcm1fYWNjZW50X2NvbG9yIiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9sZW5ndGgiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX3NwYWNpbmciLCJwYXJ0cyIsInNwbGl0IiwibGVuZ3RoIiwiaSIsImpvaW4iLCJoIiwidmVydGljYWxfbnVtIiwiaG9yaXpvbnRhbF9udW0iLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2NvbGxlY3Rfb3B0aW9ucyIsIldQQkNfQkZCX0Zvcm1TZXR0aW5ncyIsImNvbGxlY3QiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2N1c3RvbV9jb250cm9sX2tleSIsImJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9jb250YWluZXJfc3R5bGVfY29udHJvbCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X2N1c3RvbV9jb250cm9sX2tleXMiLCJpbmRleE9mIiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zZXRfcmFkaW9fY29udHJvbCIsInJvdyIsIndyYXAiLCJyYWRpb3MiLCJxdWVyeVNlbGVjdG9yQWxsIiwicmFkaW8iLCJzaG91bGRfY2hlY2siLCJjaG9pY2UiLCJjbGFzc0xpc3QiLCJ0b2dnbGUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9zZWxlY3RfY29udHJvbCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X2N1cnJlbnRfb3B0aW9ucyIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X3N0eWxlX3ZhbHVlX2Zyb21fb3B0aW9ucyIsInRoZW1lIiwicHJlZml4Iiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2Zvcm1fc3R5bGVfY29udHJvbCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fcmVzb2x2ZV9mb3JtX3N0eWxlX2Nob2ljZSIsImN1cnJlbnRfb3B0aW9ucyIsImN1cnJlbnRfdGhlbWUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX3VzZXJfdGhlbWVfc3dpdGNoIiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc19jdXN0b21fc3R5bGUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3N5bmNfY3VzdG9tX2NvbnRyb2xzIiwiaXNfY3VzdG9tIiwicmVzZXRfcm93IiwiYmFzZV90aGVtZV9yb3ciLCJoaWRkZW4iLCJzZXRBdHRyaWJ1dGUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmUiLCJnbG9iYWxfb3B0aW9ucyIsImdsb2JhbF9hcHBlYXJhbmNlIiwiYm9va2luZ19mb3JtX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2JvcmRlcl93aWR0aCIsImJvb2tpbmdfZm9ybV9ib3JkZXJfcmFkaXVzIiwiYm9va2luZ19mb3JtX3BhZGRpbmciLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmVfZGVzaWduX2NvbG9ycyIsInRleHRDb2xvciIsImZpZWxkQmFja2dyb3VuZCIsImZpZWxkVGV4dCIsImZpZWxkQm9yZGVyIiwiYm9va2luZ19mb3JtX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fZmllbGRfYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9maWVsZF90ZXh0X2NvbG9yIiwiYm9va2luZ19mb3JtX2ZpZWxkX2JvcmRlcl9jb2xvciIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fYXBwbHlfdmFycyIsInJlc29sdmVkIiwiZGVzaWduIiwicm9vdCIsIndyYXBzIiwicmVtb3ZlUHJvcGVydHkiLCJzZXRQcm9wZXJ0eSIsIndwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfdmFycyIsIndwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfcHJlc2V0cyIsInZhcnMiLCJmb3JtX3N0eWxlX3ByZXNldHMiLCJ3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X2N1c3RvbV9rZXlzIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXN0b21fZGVmYXVsdHMiLCJsb2NhbGl6ZWQiLCJjdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyIsImJvb2tpbmdfZm9ybV9jdXN0b21fYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfd2lkdGgiLCJib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMiLCJib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwiLCJib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfaG9yaXpvbnRhbCIsImJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfd2lkdGgiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfcmFkaXVzIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXJyZW50X29wdGlvbnMiLCJnbG9iYWxfZm9ybV9zdHlsZSIsImJvb2tpbmdfZm9ybV9zdHlsZSIsIndwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19taXhfY29sb3JzIiwiYW1vdW50IiwiZGVzdGluYXRpb24iLCJjaGFubmVscyIsImluZGV4Iiwic291cmNlX2NoYW5uZWwiLCJwYXJzZUludCIsInN1YnN0ciIsInRhcmdldF9jaGFubmVsIiwicHVzaCIsIk1hdGgiLCJyb3VuZCIsImNoYW5uZWwiLCJ0b1N0cmluZyIsInNsaWNlIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9sdW1pbmFuY2UiLCJoZXgiLCJwb3ciLCJ3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fYXBwbHlfYWNjZW50IiwicHJlc2VydmVfY3VzdG9tX2J1dHRvbl9jb2xvcnMiLCJib29raW5nX2Zvcm1fYWNjZW50X2VuYWJsZWQiLCJhY2NlbnQiLCJsdW1pbmFuY2UiLCJjb250cmFzdCIsImhvdmVyX3RhcmdldCIsImhvdmVyIiwiaG92ZXJfY29udHJhc3QiLCJhY2NlbnRfb3ZlcmxheSIsImNzc192YXJfbmFtZSIsIndwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19yZXNvbHZlX2Nzc192YXJzIiwicHJlc2V0IiwibGlnaHRfYm9yZGVyZWQiLCJkZWZhdWx0cyIsIndwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfY3NzX3Zhcl9rZXlzIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybV9zdHlsZV9jc3NfdmFyX25hbWVzIiwicHJlc2V0X2tleSIsInZhcl9uYW1lIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX3N5bmNfY29udHJvbHMiLCJhY2NlbnRfZW5hYmxlZCIsInRoZW1lX2NsYXNzZXMiLCJjc3NfdmFyX2tleXMiLCJjbGFzc19uYW1lIiwidGhlbWVfY2xhc3MiLCJyZW1vdmUiLCJhZGQiLCJjc3Nfa2V5Iiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2N1c3RvbV9jb250cm9sc19mcm9tX3VpIiwidGhlbWVfc2VsZWN0b3IiLCJmcm9tIiwiY2xzIiwid3BiY19iZmJfYXBpIiwid2l0aF9idWlsZGVyIiwiQnVpbGRlciIsImNhcHR1cmVfcmlnaHRfc2lkZWJhcl9hY3RpdmVfdGFiX3Jlc3RvcmVfaGFuZGxlIiwidGFibGlzdF9lbCIsImFjdGl2ZV90YWJfZWwiLCJjbGljayIsInJlc3RvcmUiLCJ0YWJfcmVzdG9yZV9oYW5kbGUiLCJyZXN0b3JlZCIsIkVWUyIsIldQQkNfQkZCX0NvcmUiLCJXUEJDX0JGQl9FdmVudHMiLCJFVl9ET05FIiwiU1RSVUNUVVJFX0xPQURFRCIsIkNBTlZBU19SRUZSRVNIRUQiLCJkb19yZXN0b3JlIiwiYnVzIiwib2ZmIiwiXyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm9uIiwiZW5hYmxlZCIsInNldF9wcmV2aWV3X21vZGUiLCJyZWJ1aWxkIiwicmVpbml0Il0sInNvdXJjZXMiOlsiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1zZXR0aW5ncy9fc3JjL3NldHRpbmdzX2VmZmVjdHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBsaWVzIGVmZmVjdHMgaW4gQ2FudmFzLCBhZnRlciBjaGFuZ2luZyBzb21lIHNldHRpbmdzIGluIHRoZSByaWdodCBzaWRlYmFyIGluIEJGQi5cbiAqXG4gKiBAZmlsZSAuLi9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9mb3JtLXNldHRpbmdzL19zcmMvc2V0dGluZ3NfZWZmZWN0cy5qc1xuICovXG4oZnVuY3Rpb24gKHcsIGQpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0IEVmZmVjdHMgPSAody5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzID0gdy5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzIHx8IHt9KTtcblx0Y29uc3QgbWFwICAgICA9IChFZmZlY3RzLm1hcCA9IEVmZmVjdHMubWFwIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKSk7XG5cblx0RWZmZWN0cy5yZWdpc3RlciA9IGZ1bmN0aW9uIChrZXksIGZuKSB7XG5cdFx0aWYgKCBrZXkgJiYgdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0bWFwW1N0cmluZygga2V5ICldID0gZm47XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGdldF9jYW52YXNfcm9vdCgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0ZC5xdWVyeVNlbGVjdG9yKCAnI3dwYmNfYmZiX19wYWdlc19jb250YWluZXInICkgfHxcblx0XHRcdGQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcnICkgfHxcblx0XHRcdGQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9fcHJldmlldycgKSB8fFxuXHRcdFx0ZC5ib2R5IHx8IGQuZG9jdW1lbnRFbGVtZW50XG5cdFx0KTtcblx0fVxuXG5cdEVmZmVjdHMuYXBwbHlfb25lID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGN0eCkge1xuXHRcdGNvbnN0IGZuID0gbWFwW1N0cmluZygga2V5ICldO1xuXHRcdGlmICggISBmbiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGZuKCB2YWx1ZSwgT2JqZWN0LmFzc2lnbiggeyBrZXksIHZhbHVlLCBjYW52YXM6IGdldF9jYW52YXNfcm9vdCgpIH0sIGN0eCB8fCB7fSApICk7XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHQvLyBrZWVwIHNpbGVudCBpbiBwcm9kdWN0aW9uIGlmIHlvdSBwcmVmZXJcblx0XHRcdGNvbnNvbGUuZXJyb3IoICdXUEJDIEVmZmVjdHMgZXJyb3I6Jywga2V5LCBlICk7XG5cdFx0fVxuXHR9O1xuXG5cdEVmZmVjdHMuYXBwbHlfYWxsID0gZnVuY3Rpb24gKG9wdGlvbnMsIGN0eCkge1xuXHRcdGlmICggISBvcHRpb25zIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0T2JqZWN0LmtleXMoIG9wdGlvbnMgKS5mb3JFYWNoKCBmdW5jdGlvbiAoaykge1xuXHRcdFx0RWZmZWN0cy5hcHBseV9vbmUoIGssIG9wdGlvbnNba10sIE9iamVjdC5hc3NpZ24oIHsgb3B0aW9uczogb3B0aW9ucyB9LCBjdHggfHwge30gKSApO1xuXHRcdH0gKTtcblx0fTtcblxuXHQvKipcblx0ICogTm9ybWFsaXplIHNldHRpbmdzIHBhY2sgdG8gdGhlIG1pbmltdW0gcmVxdWlyZWQgc2hhcGU6XG5cdCAqIHsgb3B0aW9uczoge30sIGNzc192YXJzOiB7fSB9XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gcGFja1xuXHQgKiBAcmV0dXJuIHt7b3B0aW9uczpPYmplY3QsIGNzc192YXJzOk9iamVjdCwgYmZiX29wdGlvbnM/Ok9iamVjdH18bnVsbH1cblx0ICovXG5cdEVmZmVjdHMubm9ybWFsaXplX3BhY2sgPSBmdW5jdGlvbiAocGFjaykge1xuXG5cdFx0aWYgKCBwYWNrID09PSBudWxsIHx8IHR5cGVvZiBwYWNrID09PSAndW5kZWZpbmVkJyB8fCBwYWNrID09PSAnJyApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIFBhcnNlIEpTT04gc3RyaW5nIGlmIG5lZWRlZC5cblx0XHRpZiAoIHR5cGVvZiBwYWNrID09PSAnc3RyaW5nJyApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHBhY2sgPSBKU09OLnBhcnNlKCBwYWNrICk7XG5cdFx0XHR9IGNhdGNoICggX2UgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggISBwYWNrIHx8IHR5cGVvZiBwYWNrICE9PSAnb2JqZWN0JyApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIElmIHVzZXIgcGFzc2VkIGp1c3Qge2tleTp2YWx1ZX0gb3B0aW9ucyBtYXAsIHdyYXAgaXQuXG5cdFx0Y29uc3QgaGFzX3NoYXBlID1cblx0XHRcdFx0ICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIHBhY2ssICdvcHRpb25zJyApIHx8XG5cdFx0XHRcdCAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwYWNrLCAnY3NzX3ZhcnMnICkgfHxcblx0XHRcdFx0ICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIHBhY2ssICdiZmJfb3B0aW9ucycgKTtcblxuXHRcdGlmICggISBoYXNfc2hhcGUgKSB7XG5cdFx0XHRwYWNrID0geyBvcHRpb25zOiBwYWNrLCBjc3NfdmFyczoge30gfTtcblx0XHR9XG5cblx0XHRpZiAoICEgcGFjay5vcHRpb25zIHx8IHR5cGVvZiBwYWNrLm9wdGlvbnMgIT09ICdvYmplY3QnICkge1xuXHRcdFx0cGFjay5vcHRpb25zID0ge307XG5cdFx0fVxuXHRcdGlmICggISBwYWNrLmNzc192YXJzIHx8IHR5cGVvZiBwYWNrLmNzc192YXJzICE9PSAnb2JqZWN0JyApIHtcblx0XHRcdHBhY2suY3NzX3ZhcnMgPSB7fTtcblx0XHR9XG5cblx0XHQvLyBiZmJfb3B0aW9ucyBpcyBvcHRpb25hbDsga2VlcCBpZiB2YWxpZC5cblx0XHRpZiAoIHBhY2suYmZiX29wdGlvbnMgJiYgdHlwZW9mIHBhY2suYmZiX29wdGlvbnMgIT09ICdvYmplY3QnICkge1xuXHRcdFx0ZGVsZXRlIHBhY2suYmZiX29wdGlvbnM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhY2s7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJlLWFwcGx5IHNldHRpbmdzIGVmZmVjdHMgYWZ0ZXIgYSBjYW52YXMgcmVidWlsZCAvIHN0cnVjdHVyZSBsb2FkLlxuXHQgKlxuXHQgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHN0cnVjdHVyZSBsb2FkaW5nIGNhbiByZXBsYWNlIERPTSBub2RlcyB0aGF0IGVmZmVjdHMgdGFyZ2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHNldHRpbmdzX3BhY2sgIHN0cmluZ3xvYmplY3Qgc2V0dGluZ3NfanNvbiBwYWNrIChvciBwbGFpbiBvcHRpb25zIG1hcClcblx0ICogQHBhcmFtIHtPYmplY3R9IFtjdHhdXG5cdCAqL1xuXHRFZmZlY3RzLnJlYXBwbHlfYWZ0ZXJfY2FudmFzID0gZnVuY3Rpb24gKHNldHRpbmdzX3BhY2ssIGN0eCkge1xuXG5cdFx0Y29uc3QgcGFjayA9IEVmZmVjdHMubm9ybWFsaXplX3BhY2soIHNldHRpbmdzX3BhY2sgKTtcblx0XHRpZiAoICEgcGFjayApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBpbW1lZGlhdGVseSAoYmVzdCBlZmZvcnQpLlxuXHRcdEVmZmVjdHMuYXBwbHlfYWxsKCBwYWNrLm9wdGlvbnMsIE9iamVjdC5hc3NpZ24oIHsgc291cmNlOiAncmVhcHBseV9hZnRlcl9jYW52YXMnIH0sIGN0eCB8fCB7fSApICk7XG5cdFx0d3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2FwcGx5KCBudWxsLCBPYmplY3QuYXNzaWduKCB7IHNvdXJjZTogJ3JlYXBwbHlfYWZ0ZXJfY2FudmFzJyB9LCBjdHggfHwge30gKSApO1xuXG5cdFx0Ly8gU29tZSBtb2R1bGVzL2h5ZHJhdGlvbiBtYXkgcnVuIHNob3J0bHkgYWZ0ZXI7IGRvIG9uZSBtb3JlIHBhc3MuXG5cdFx0c2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xuXHRcdFx0RWZmZWN0cy5hcHBseV9hbGwoIHBhY2sub3B0aW9ucywgT2JqZWN0LmFzc2lnbiggeyBzb3VyY2U6ICdyZWFwcGx5X2FmdGVyX2NhbnZhc19kZWxheWVkJyB9LCBjdHggfHwge30gKSApO1xuXHRcdFx0d3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2FwcGx5KCBudWxsLCBPYmplY3QuYXNzaWduKCB7IHNvdXJjZTogJ3JlYXBwbHlfYWZ0ZXJfY2FudmFzX2RlbGF5ZWQnIH0sIGN0eCB8fCB7fSApICk7XG5cdFx0fSwgNjAgKTtcblx0fTtcblxuXHQvLyAxKSBBcHBseSBmcm9tIEFKQVggbG9hZC5cblx0ZC5hZGRFdmVudExpc3RlbmVyKCAnd3BiYzpiZmI6Zm9ybV9zZXR0aW5nczphcHBseScsIGZ1bmN0aW9uIChlKSB7XG5cdFx0Y29uc3QgcGFjayA9IGUgJiYgZS5kZXRhaWwgPyBlLmRldGFpbC5zZXR0aW5ncyA6IG51bGw7XG5cdFx0aWYgKCBwYWNrICYmIHBhY2sub3B0aW9ucyApIHtcblx0XHRcdEVmZmVjdHMuYXBwbHlfYWxsKCBwYWNrLm9wdGlvbnMsIHsgc291cmNlOiAnYXBwbHknIH0gKTtcblx0XHR9XG5cdFx0d3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2FwcGx5KCBudWxsLCB7IHNvdXJjZTogJ2FwcGx5LWdsb2JhbC1zdHlsZScgfSApO1xuXHR9ICk7XG5cblx0Ly8gMikgQXBwbHkgbGl2ZSBmcm9tIFVJIGNoYW5nZSAoZGVsZWdhdGVkKS5cblx0ZnVuY3Rpb24gY3NzX2VzY2FwZSh2YWx1ZSkge1xuXHRcdGNvbnN0IHYgPSBTdHJpbmcoIHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlICk7XG5cdFx0aWYgKCB3LkNTUyAmJiB0eXBlb2Ygdy5DU1MuZXNjYXBlID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0cmV0dXJuIHcuQ1NTLmVzY2FwZSggdiApO1xuXHRcdH1cblx0XHRyZXR1cm4gdi5yZXBsYWNlKCAvW15hLXpBLVowLTlfXFwtXS9nLCAnXFxcXCQmJyApO1xuXHR9XG5cblx0ZnVuY3Rpb24gZmluZF9mc19yb290KGVsKSB7XG5cdFx0aWYgKCAhIGVsIHx8ICEgZWwuY2xvc2VzdCApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIDEpIERpcmVjdDogZWxlbWVudCBvciBhbmNlc3RvciBjYXJyaWVzIEZTIGtleSAoaW5wdXQvc2VsZWN0L3RleHRhcmVhIHdyaXRlciwgcmFkaW8gd3JhcHBlciwgZXRjLilcblx0XHRjb25zdCBkaXJlY3QgPSBlbC5jbG9zZXN0KCAnW2RhdGEtd3BiYy1iZmItZnMta2V5XScgKTtcblx0XHRpZiAoIGRpcmVjdCApIHtcblx0XHRcdHJldHVybiBkaXJlY3Q7XG5cdFx0fVxuXG5cdFx0Ly8gMikgTGVuZ3RoOiBldmVudCBjYW1lIGZyb20gbnVtYmVyL3VuaXQvcmFuZ2UgaW5zaWRlIC53cGJjX3NsaWRlcl9sZW5fZ3JvdXBcblx0XHRjb25zdCBsZW5fZ3JvdXAgPSBlbC5jbG9zZXN0KCAnLndwYmNfc2xpZGVyX2xlbl9ncm91cCcgKTtcblx0XHRpZiAoIGxlbl9ncm91cCApIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGxlbl9ncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjX3NsaWRlcl9sZW5fd3JpdGVyXVtkYXRhLXdwYmMtYmZiLWZzLWtleV0nICkgfHxcblx0XHRcdFx0bGVuX2dyb3VwLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmMtYmZiLWZzLXR5cGU9XCJsZW5ndGhcIl1bZGF0YS13cGJjLWJmYi1mcy1rZXldJyApIHx8XG5cdFx0XHRcdG51bGxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gMykgU3BhY2luZzogZXZlbnQgY2FtZSBmcm9tIHZlcnRpY2FsL2hvcml6b250YWwgbnVtYmVyIGluc2lkZSAud3BiY19zcGFjaW5nX2dyb3VwLlxuXHRcdGNvbnN0IHNwYWNpbmdfZ3JvdXAgPSBlbC5jbG9zZXN0KCAnLndwYmNfc3BhY2luZ19ncm91cCcgKTtcblx0XHRpZiAoIHNwYWNpbmdfZ3JvdXAgKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRzcGFjaW5nX2dyb3VwLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmNfc3BhY2luZ193cml0ZXJdW2RhdGEtd3BiYy1iZmItZnMta2V5XScgKSB8fFxuXHRcdFx0XHRzcGFjaW5nX2dyb3VwLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmMtYmZiLWZzLXR5cGU9XCJzcGFjaW5nXCJdW2RhdGEtd3BiYy1iZmItZnMta2V5XScgKSB8fFxuXHRcdFx0XHRudWxsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIDQpIFJhbmdlOiBldmVudCBjYW1lIGZyb20gcmFuZ2UgaW5wdXQgaW5zaWRlIC53cGJjX3NsaWRlcl9yYW5nZV9ncm91cFxuXHRcdGNvbnN0IHJhbmdlX2dyb3VwID0gZWwuY2xvc2VzdCggJy53cGJjX3NsaWRlcl9yYW5nZV9ncm91cCcgKTtcblx0XHRpZiAoIHJhbmdlX2dyb3VwICkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0cmFuZ2VfZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zbGlkZXJfcmFuZ2Vfd3JpdGVyXVtkYXRhLXdwYmMtYmZiLWZzLWtleV0nICkgfHxcblx0XHRcdFx0cmFuZ2VfZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zbGlkZXJfcmFuZ2Vfd3JpdGVyXScgKSB8fFxuXHRcdFx0XHRudWxsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVhZF92YWx1ZV9mcm9tX2ZzX3Jvb3QoZnNfcm9vdCwgb3JpZ2luYWxfdGFyZ2V0KSB7XG5cdFx0aWYgKCAhIGZzX3Jvb3QgKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZnNfdHlwZSA9IFN0cmluZyggZnNfcm9vdC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWZzLXR5cGUnICkgfHwgJycgKTtcblxuXHRcdC8vIFJBRElPOiByZWFkIGNoZWNrZWQgd2l0aGluIHdyYXBwZXIuXG5cdFx0aWYgKCBmc190eXBlID09PSAncmFkaW8nICkge1xuXHRcdFx0Y29uc3QgY29udHJvbF9pZCA9IGZzX3Jvb3QuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1mcy1jb250cm9saWQnICkgfHwgJyc7XG5cdFx0XHRjb25zdCBzZWxlY3RvciAgID0gY29udHJvbF9pZFxuXHRcdFx0XHQ/ICdpbnB1dFt0eXBlPVwicmFkaW9cIl1bbmFtZT1cIicgKyBjc3NfZXNjYXBlKCBjb250cm9sX2lkICkgKyAnXCJdOmNoZWNrZWQnXG5cdFx0XHRcdDogJ2lucHV0W3R5cGU9XCJyYWRpb1wiXTpjaGVja2VkJztcblxuXHRcdFx0Y29uc3QgY2hlY2tlZCA9IGZzX3Jvb3QucXVlcnlTZWxlY3Rvciggc2VsZWN0b3IgKTtcblx0XHRcdHJldHVybiBjaGVja2VkID8gU3RyaW5nKCBjaGVja2VkLnZhbHVlIHx8ICcnICkgOiAnJztcblx0XHR9XG5cblx0XHRpZiAoIGZzX3R5cGUgPT09ICdzcGFjaW5nJyApIHtcblx0XHRcdGNvbnN0IGdyb3VwID0gKCBvcmlnaW5hbF90YXJnZXQgJiYgb3JpZ2luYWxfdGFyZ2V0LmNsb3Nlc3QgKSA/IG9yaWdpbmFsX3RhcmdldC5jbG9zZXN0KCAnLndwYmNfc3BhY2luZ19ncm91cCcgKSA6IGZzX3Jvb3QuY2xvc2VzdCggJy53cGJjX3NwYWNpbmdfZ3JvdXAnICk7XG5cdFx0XHRjb25zdCB2ZXJ0aWNhbF9pbnB1dCA9IGdyb3VwID8gZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zcGFjaW5nX3ZlcnRpY2FsXScgKSA6IG51bGw7XG5cdFx0XHRjb25zdCBob3Jpem9udGFsX2lucHV0ID0gZ3JvdXAgPyBncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjX3NwYWNpbmdfaG9yaXpvbnRhbF0nICkgOiBudWxsO1xuXHRcdFx0Y29uc3Qgd3JpdGVyID0gZ3JvdXAgPyBncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjX3NwYWNpbmdfd3JpdGVyXScgKSA6IG51bGw7XG5cdFx0XHRjb25zdCB2ZXJ0aWNhbCA9IHZlcnRpY2FsX2lucHV0ID8gU3RyaW5nKCB2ZXJ0aWNhbF9pbnB1dC52YWx1ZSB8fCAnMCcgKSA6ICcwJztcblx0XHRcdGNvbnN0IGhvcml6b250YWwgPSBob3Jpem9udGFsX2lucHV0ID8gU3RyaW5nKCBob3Jpem9udGFsX2lucHV0LnZhbHVlIHx8IHZlcnRpY2FsICkgOiB2ZXJ0aWNhbDtcblx0XHRcdGNvbnN0IGNvbWJpbmVkID0gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19ub3JtYWxpemVfc3BhY2luZ19udW1iZXJzKCB2ZXJ0aWNhbCwgaG9yaXpvbnRhbCApO1xuXG5cdFx0XHRpZiAoIHdyaXRlciApIHtcblx0XHRcdFx0d3JpdGVyLnZhbHVlID0gY29tYmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBjb21iaW5lZDtcblx0XHR9XG5cblx0XHQvLyBDSEVDS0JPWCAvIFRPR0dMRVxuXHRcdGlmICggKG9yaWdpbmFsX3RhcmdldCAmJiBvcmlnaW5hbF90YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94JykgfHwgZnNfcm9vdC50eXBlID09PSAnY2hlY2tib3gnICkge1xuXHRcdFx0Y29uc3QgY2IgPSAob3JpZ2luYWxfdGFyZ2V0ICYmIG9yaWdpbmFsX3RhcmdldC50eXBlID09PSAnY2hlY2tib3gnKSA/IG9yaWdpbmFsX3RhcmdldCA6IGZzX3Jvb3Q7XG5cdFx0XHRyZXR1cm4gY2IuY2hlY2tlZCA/ICdPbicgOiAnT2ZmJztcblx0XHR9XG5cblx0XHQvLyBERUZBVUxUOiB3cml0ZXIvaW5wdXQvdGV4dGFyZWEvc2VsZWN0XG5cdFx0aWYgKCBmc19yb290LnZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nKCBmc19yb290LnZhbHVlICk7XG5cdFx0fVxuXHRcdGlmICggb3JpZ2luYWxfdGFyZ2V0ICYmIG9yaWdpbmFsX3RhcmdldC52YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0cmV0dXJuIFN0cmluZyggb3JpZ2luYWxfdGFyZ2V0LnZhbHVlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwbHlfY2hhbmdlX2Zyb21fdGFyZ2V0KHRhcmdldCwgZXZlbnRfdHlwZSwgZXZlbnRfc291cmNlKSB7XG5cdFx0aWYgKCAhIHRhcmdldCApIHsgcmV0dXJuOyB9XG5cblx0XHRjb25zdCBmc19yb290ID0gZmluZF9mc19yb290KCB0YXJnZXQgKTtcblx0XHRpZiAoICEgZnNfcm9vdCApIHsgcmV0dXJuOyB9XG5cblxuXHRcdC8vIE5vcm1hbGl6ZSBldmVudHMgc28gZWFjaCBjb250cm9sIHByb2R1Y2VzIGV4YWN0bHkgb25lIGVmZmVjdCBjYWxsLlxuXHRcdC8vIC0gdG9nZ2xlL3NlbGVjdC9yYWRpby9jaGVja2JveCA9PiBcImNoYW5nZVwiIG9ubHkuXG5cdFx0Ly8gLSBldmVyeXRoaW5nIGVsc2UgICAgICAgICAgICAgID0+IFwiaW5wdXRcIiBvbmx5LlxuXHRcdGNvbnN0IGZzX3R5cGUgPSBTdHJpbmcoIGZzX3Jvb3QuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1mcy10eXBlJyApIHx8ICcnICk7XG5cdFx0Y29uc3QgdGFnICAgICA9IFN0cmluZyggdGFyZ2V0LnRhZ05hbWUgfHwgJycgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGNvbnN0IHR5cGUgICAgPSBTdHJpbmcoIHRhcmdldC50eXBlIHx8ICcnICkudG9Mb3dlckNhc2UoKTtcblxuXHRcdGNvbnN0IHVzZV9jaGFuZ2UgPSAoZnNfdHlwZSA9PT0gJ3RvZ2dsZScpIHx8IChmc190eXBlID09PSAnc2VsZWN0JykgfHwgKGZzX3R5cGUgPT09ICdyYWRpbycpIHx8ICh0eXBlID09PSAnY2hlY2tib3gnKSB8fCAodHlwZSA9PT0gJ3JhZGlvJykgfHwgKHRhZyA9PT0gJ3NlbGVjdCcpO1xuXG5cdFx0aWYgKCB1c2VfY2hhbmdlICYmIGV2ZW50X3R5cGUgIT09ICdjaGFuZ2UnICkgeyByZXR1cm47IH1cblx0XHRpZiAoICEgdXNlX2NoYW5nZSAmJiBldmVudF90eXBlICE9PSAnaW5wdXQnICkgeyByZXR1cm47IH1cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0XHRjb25zdCBrZXkgPSBmc19yb290LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItZnMta2V5JyApO1xuXHRcdGlmICggISBrZXkgKSB7IHJldHVybjsgfVxuXG5cdFx0Y29uc3Qgc2NvcGUgPSBmc19yb290LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItZnMtc2NvcGUnICkgfHwgJyc7XG5cdFx0Y29uc3QgdmFsdWUgPSByZWFkX3ZhbHVlX2Zyb21fZnNfcm9vdCggZnNfcm9vdCwgdGFyZ2V0ICk7XG5cblx0XHRFZmZlY3RzLmFwcGx5X29uZSgga2V5LCB2YWx1ZSwgeyBzb3VyY2U6IGV2ZW50X3NvdXJjZSB8fCAndWknLCBzY29wZTogc2NvcGUsIGNvbnRyb2w6IHRhcmdldCwgZnNfcm9vdDogZnNfcm9vdCB9ICk7XG5cdH1cblxuXHRmdW5jdGlvbiBpc19jb2xvcmlzX2NvbnRyb2wodGFyZ2V0KSB7XG5cdFx0aWYgKCAhIHRhcmdldCB8fCAhIHRhcmdldC5tYXRjaGVzICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0YXJnZXQubWF0Y2hlcyggJ1tkYXRhLXdwYmMtYmZiLWZzLXR5cGU9XCJjb2xvclwiXSwgW2RhdGEtaW5zcGVjdG9yLXR5cGU9XCJjb2xvclwiXSwgLndwYmNfYmZiX2NvbG9yaXMnICk7XG5cdH1cblxuXHRmdW5jdGlvbiBvbl9jaGFuZ2UoZXYpIHtcblx0XHQvLyBJZ25vcmUgZ2VuZXJpYyBzeW50aGV0aWMgZXZlbnRzIGRpc3BhdGNoZWQgYnkgY29kZSAoYXBwbHkvcmVhcHBseSwgc2xpZGVyIHN5bmMsIGV0Yy4pLlxuXHRcdC8vIENvbG9yaXMgZGlzcGF0Y2hlcyBzeW50aGV0aWMgaW5wdXQgZXZlbnRzIHdoaWxlIHRoZSB1c2VyIHBpY2tzIGEgY29sb3IsIHNvIGFsbG93IHRob3NlIGNvbG9yIGNvbnRyb2xzIHRocm91Z2guXG5cdFx0aWYgKCBldiAmJiBldi5pc1RydXN0ZWQgPT09IGZhbHNlICYmICEgaXNfY29sb3Jpc19jb250cm9sKCBldi50YXJnZXQgKSApIHsgcmV0dXJuOyB9XG5cdFx0YXBwbHlfY2hhbmdlX2Zyb21fdGFyZ2V0KCBldiAmJiBldi50YXJnZXQsIGV2ICYmIGV2LnR5cGUsICggZXYgJiYgZXYuaXNUcnVzdGVkID09PSBmYWxzZSApID8gJ2NvbG9yaXMnIDogJ3VpJyApO1xuXHR9XG5cblx0ZC5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCBvbl9jaGFuZ2UsIGZhbHNlICk7XG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIG9uX2NoYW5nZSwgZmFsc2UgKTtcblx0ZnVuY3Rpb24gb25fY29sb3Jpc19waWNrKGV2KSB7XG5cdFx0Y29uc3QgZGV0YWlsID0gZXYgJiYgZXYuZGV0YWlsID8gZXYuZGV0YWlsIDoge307XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZGV0YWlsLmN1cnJlbnRFbCB8fCBkZXRhaWwuZWwgfHwgZGV0YWlsLmlucHV0IHx8IGV2LnRhcmdldCB8fCBudWxsO1xuXG5cdFx0aWYgKCAhIGlzX2NvbG9yaXNfY29udHJvbCggdGFyZ2V0ICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBkZXRhaWwuY29sb3IgJiYgdGFyZ2V0LnZhbHVlICE9PSBkZXRhaWwuY29sb3IgKSB7XG5cdFx0XHR0YXJnZXQudmFsdWUgPSBkZXRhaWwuY29sb3I7XG5cdFx0fVxuXG5cdFx0YXBwbHlfY2hhbmdlX2Zyb21fdGFyZ2V0KCB0YXJnZXQsICdpbnB1dCcsICdjb2xvcmlzJyApO1xuXHR9XG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ2NvbG9yaXM6cGljaycsIG9uX2NvbG9yaXNfcGljaywgZmFsc2UgKTtcblx0ZC5hZGRFdmVudExpc3RlbmVyKCAnd3BiYzpiZmI6Y29sb3JpczpjaGFuZ2UnLCBvbl9jb2xvcmlzX3BpY2ssIGZhbHNlICk7XG5cbn0pKCB3aW5kb3csIGRvY3VtZW50ICk7XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X3ByZXNldHMoKSB7XG5cdHJldHVybiB7XG5cdFx0Ym9yZGVyZWQ6IHtcblx0XHRcdGJhY2tncm91bmQgOiAnI2ZmZmZmZicsXG5cdFx0XHRib3JkZXJDb2xvcjogJyNjY2NjY2MnLFxuXHRcdFx0Ym9yZGVyV2lkdGg6ICcxcHgnLFxuXHRcdFx0cmFkaXVzICAgICA6ICcycHgnLFxuXHRcdFx0cGFkZGluZyAgICA6ICcxMHB4IDMwcHgnLFxuXHRcdFx0c2hhZG93ICAgICA6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpIDBweCAycHggNnB4IDBweCdcblx0XHR9LFxuXHRcdG5vbmUgICAgOiB7XG5cdFx0XHRiYWNrZ3JvdW5kIDogJ3RyYW5zcGFyZW50Jyxcblx0XHRcdGJvcmRlckNvbG9yOiAndHJhbnNwYXJlbnQnLFxuXHRcdFx0Ym9yZGVyV2lkdGg6ICcwcHgnLFxuXHRcdFx0cmFkaXVzICAgICA6ICcwcHgnLFxuXHRcdFx0cGFkZGluZyAgICA6ICcwcHgnLFxuXHRcdFx0c2hhZG93ICAgICA6ICdub25lJ1xuXHRcdH0sXG5cdFx0c29mdCAgICA6IHtcblx0XHRcdGJhY2tncm91bmQgOiAnI2Y5ZjlmYScsXG5cdFx0XHRib3JkZXJDb2xvcjogJyNmZmYnLFxuXHRcdFx0Ym9yZGVyV2lkdGg6ICczcHgnLFxuXHRcdFx0cmFkaXVzICAgICA6ICc4cHgnLFxuXHRcdFx0cGFkZGluZyAgICA6ICcyMHB4Jyxcblx0XHRcdHNoYWRvdyAgICAgOiAncmdiYSgxNSwgMjMsIDQyLCAwLjA2KSAwcHggNHB4IDE2cHggMHB4J1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc19kYXJrX3RoZW1lKG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnID8gb3B0aW9ucyA6IHt9O1xuXHRyZXR1cm4gJ3dwYmNfdGhlbWVfZGFya18xJyA9PT0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV90aGVtZSB8fCAnJyApO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9wcmVzZXRfZm9yX29wdGlvbnMoc3R5bGUsIG9wdGlvbnMpIHtcblx0Y29uc3QgcHJlc2V0cyA9IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X3ByZXNldHMoKTtcblxuXHRpZiAoICEgd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc19kYXJrX3RoZW1lKCBvcHRpb25zICkgKSB7XG5cdFx0cmV0dXJuIHByZXNldHNbc3R5bGVdIHx8IHByZXNldHMuYm9yZGVyZWQ7XG5cdH1cblxuXHRpZiAoICdzb2Z0JyA9PT0gc3R5bGUgKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGJhY2tncm91bmQgOiAnIzFmMjkzNycsXG5cdFx0XHRib3JkZXJDb2xvcjogJyMzMzQxNTUnLFxuXHRcdFx0Ym9yZGVyV2lkdGg6ICczcHgnLFxuXHRcdFx0cmFkaXVzICAgICA6ICc4cHgnLFxuXHRcdFx0cGFkZGluZyAgICA6ICcyMHB4Jyxcblx0XHRcdHNoYWRvdyAgICAgOiAncmdiYSgwLCAwLCAwLCAwLjI0KSAwcHggNHB4IDE2cHggMHB4J1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gcHJlc2V0c1tzdHlsZV0gfHwgcHJlc2V0cy5ib3JkZXJlZDtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvcih2YWx1ZSwgZmFsbGJhY2spIHtcblx0Y29uc3QgdiA9IFN0cmluZyggdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUgKS50cmltKCk7XG5cdGlmICggL14jKD86WzAtOWEtZl17M318WzAtOWEtZl17Nn0pJC9pLnRlc3QoIHYgKSApIHtcblx0XHRyZXR1cm4gdjtcblx0fVxuXHRpZiAoIHYgPT09ICd0cmFuc3BhcmVudCcgKSB7XG5cdFx0cmV0dXJuIHY7XG5cdH1cblx0cmV0dXJuIGZhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX29wdGlvbmFsX2NvbG9yKHZhbHVlKSB7XG5cdHJldHVybiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCB2YWx1ZSwgJycgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGFuIG9wYXF1ZSBhY2NlbnQgY29sb3Igd2l0aCB0aGUgUEhQLWxvY2FsaXplZCBpbnN0YWxsYXRpb24gZGVmYXVsdC5cbiAqXG4gKiBUaGUgRm9ybSBTdHlsZSBlZmZlY3RzIGxpdmUgb3V0c2lkZSB0aGUgcmVnaXN0cmF0aW9uIElJRkUsIHNvIHRoZSBkZWZhdWx0IGlzXG4gKiBkZWxpYmVyYXRlbHkgcmVhZCBmcm9tIHRoZSBzaGFyZWQgbG9jYWxpemVkIHBheWxvYWQgYXQgdGhlIHBvaW50IG9mIHVzZS5cbiAqIEludmFsaWQgcmVxdWVzdGVkIGFuZCBsb2NhbGl6ZWQgdmFsdWVzIHJldHVybiBhbiBlbXB0eSBzdHJpbmcsIGFsbG93aW5nIHRoZVxuICogY2FsbGVyIHRvIHNraXAgdGhlIGFjY2VudCBvdmVybGF5IHdpdGhvdXQgdGhyb3dpbmcgb3IgcHJvZHVjaW5nIGludmFsaWQgQ1NTLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVxdWVzdGVkIGFjY2VudCBjb2xvci5cbiAqIEByZXR1cm4ge3N0cmluZ30gVmFsaWQgdGhyZWUtIG9yIHNpeC1kaWdpdCBoZXhhZGVjaW1hbCBjb2xvciwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICovXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fc2FuaXRpemVfYWNjZW50X2NvbG9yKHZhbHVlKSB7XG5cdGNvbnN0IHJlcXVlc3RlZF9jb2xvciA9IFN0cmluZyggdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUgKS50cmltKCk7XG5cdGlmICggL14jKD86WzAtOWEtZl17M318WzAtOWEtZl17Nn0pJC9pLnRlc3QoIHJlcXVlc3RlZF9jb2xvciApICkge1xuXHRcdHJldHVybiByZXF1ZXN0ZWRfY29sb3I7XG5cdH1cblxuXHRjb25zdCBzZXR0aW5nc192YXJzID0gd2luZG93LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMgJiYgdHlwZW9mIHdpbmRvdy53cGJjX2JmYl9zZXR0aW5nc192YXJzID09PSAnb2JqZWN0J1xuXHRcdD8gd2luZG93LndwYmNfYmZiX3NldHRpbmdzX3ZhcnNcblx0XHQ6IHt9O1xuXHRjb25zdCBhY2NlbnRfZGVmYXVsdHMgPSBzZXR0aW5nc192YXJzLmZvcm1fYWNjZW50X2RlZmF1bHRzICYmIHR5cGVvZiBzZXR0aW5nc192YXJzLmZvcm1fYWNjZW50X2RlZmF1bHRzID09PSAnb2JqZWN0J1xuXHRcdD8gc2V0dGluZ3NfdmFycy5mb3JtX2FjY2VudF9kZWZhdWx0c1xuXHRcdDoge307XG5cdGNvbnN0IGRlZmF1bHRfY29sb3IgPSBTdHJpbmcoIGFjY2VudF9kZWZhdWx0cy5ib29raW5nX2Zvcm1fYWNjZW50X2NvbG9yIHx8ICcnICkudHJpbSgpO1xuXG5cdHJldHVybiAvXiMoPzpbMC05YS1mXXszfXxbMC05YS1mXXs2fSkkL2kudGVzdCggZGVmYXVsdF9jb2xvciApID8gZGVmYXVsdF9jb2xvciA6ICcnO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2xlbmd0aCh2YWx1ZSwgZmFsbGJhY2spIHtcblx0Y29uc3QgdiA9IFN0cmluZyggdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUgKS50cmltKCk7XG5cdGlmICggL15cXGQrKD86XFwuXFxkKyk/KD86cHh8cmVtfGVtfCUpJC9pLnRlc3QoIHYgKSApIHtcblx0XHRyZXR1cm4gdjtcblx0fVxuXHRyZXR1cm4gZmFsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfc3BhY2luZyh2YWx1ZSwgZmFsbGJhY2spIHtcblx0Y29uc3QgdiA9IFN0cmluZyggdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUgKS50cmltKCkucmVwbGFjZSggL1xccysvZywgJyAnICk7XG5cdGNvbnN0IHBhcnRzID0gdiA/IHYuc3BsaXQoICcgJyApIDogW107XG5cdGlmICggcGFydHMubGVuZ3RoIDwgMSB8fCBwYXJ0cy5sZW5ndGggPiA0ICkge1xuXHRcdHJldHVybiBmYWxsYmFjaztcblx0fVxuXHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKyApIHtcblx0XHRpZiAoICEgL15cXGQrKD86XFwuXFxkKyk/KD86cHh8cmVtfGVtfCUpJC9pLnRlc3QoIHBhcnRzW2ldICkgKSB7XG5cdFx0XHRyZXR1cm4gZmFsbGJhY2s7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYXJ0cy5qb2luKCAnICcgKTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19ub3JtYWxpemVfc3BhY2luZ19udW1iZXJzKHZlcnRpY2FsLCBob3Jpem9udGFsKSB7XG5cdGNvbnN0IHYgPSBTdHJpbmcoIHZlcnRpY2FsID09IG51bGwgPyAnJyA6IHZlcnRpY2FsICkudHJpbSgpO1xuXHRjb25zdCBoID0gU3RyaW5nKCBob3Jpem9udGFsID09IG51bGwgPyAnJyA6IGhvcml6b250YWwgKS50cmltKCk7XG5cdGNvbnN0IHZlcnRpY2FsX251bSA9IC9eXFxkKyg/OlxcLlxcZCspPyQvLnRlc3QoIHYgKSA/IHYgOiAnMCc7XG5cdGNvbnN0IGhvcml6b250YWxfbnVtID0gL15cXGQrKD86XFwuXFxkKyk/JC8udGVzdCggaCApID8gaCA6IHZlcnRpY2FsX251bTtcblxuXHRyZXR1cm4gdmVydGljYWxfbnVtICsgJ3B4ICcgKyBob3Jpem9udGFsX251bSArICdweCc7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fY29sbGVjdF9vcHRpb25zKGN0eCwga2V5LCB2YWx1ZSkge1xuXHRsZXQgb3B0aW9ucyA9IChjdHggJiYgY3R4Lm9wdGlvbnMgJiYgdHlwZW9mIGN0eC5vcHRpb25zID09PSAnb2JqZWN0JykgPyBPYmplY3QuYXNzaWduKCB7fSwgY3R4Lm9wdGlvbnMgKSA6IHt9O1xuXG5cdGlmICggd2luZG93LldQQkNfQkZCX0Zvcm1TZXR0aW5ncyAmJiB0eXBlb2Ygd2luZG93LldQQkNfQkZCX0Zvcm1TZXR0aW5ncy5jb2xsZWN0ID09PSAnZnVuY3Rpb24nICkge1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKCB3aW5kb3cuV1BCQ19CRkJfRm9ybVNldHRpbmdzLmNvbGxlY3QoICdmb3JtJyApIHx8IHt9LCBvcHRpb25zICk7XG5cdH1cblxuXHRpZiAoIGtleSApIHtcblx0XHRvcHRpb25zW1N0cmluZygga2V5ICldID0gdmFsdWU7XG5cdH1cblxuXHRpZiAoIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfY3VzdG9tX2NvbnRyb2xfa2V5KCBrZXkgKSApIHtcblx0XHRvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgPSAnY3VzdG9tJztcblx0XHR3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9jb250YWluZXJfc3R5bGVfY29udHJvbCggJ2N1c3RvbScgKTtcblx0fVxuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9jdXN0b21fY29udHJvbF9rZXlzKCkge1xuXHRyZXR1cm4gW1xuXHRcdCdib29raW5nX2Zvcm1fYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9ib3JkZXJfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fYm9yZGVyX3dpZHRoJyxcblx0XHQnYm9va2luZ19mb3JtX2JvcmRlcl9yYWRpdXMnLFxuXHRcdCdib29raW5nX2Zvcm1fcGFkZGluZycsXG5cdFx0J2Jvb2tpbmdfZm9ybV90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2ZpZWxkX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fZmllbGRfdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9maWVsZF9ib3JkZXJfY29sb3InXG5cdF07XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfY3VzdG9tX2NvbnRyb2xfa2V5KGtleSkge1xuXHRyZXR1cm4gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfY3VzdG9tX2NvbnRyb2xfa2V5cygpLmluZGV4T2YoIFN0cmluZygga2V5IHx8ICcnICkgKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2V0X2NvbnRhaW5lcl9zdHlsZV9jb250cm9sKHZhbHVlKSB7XG5cdGNvbnN0IGNvbnRyb2wgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtd3BiYy1iZmItZnMta2V5PVwiYm9va2luZ19mb3JtX2NvbnRhaW5lcl9zdHlsZVwiXScgKTtcblx0aWYgKCAhIGNvbnRyb2wgfHwgY29udHJvbC52YWx1ZSA9PT0gdmFsdWUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29udHJvbC52YWx1ZSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9yYWRpb19jb250cm9sKGtleSwgdmFsdWUpIHtcblx0Y29uc3Qgcm93ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZm9ybV9zZXR0aW5nW2RhdGEta2V5PVwiJyArIGtleSArICdcIl0nICk7XG5cdGlmICggISByb3cgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3Qgd3JhcCA9IHJvdy5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19mb3JtX3NldHRpbmdfcmFkaW9bZGF0YS13cGJjLWJmYi1mcy1jb250cm9saWRdJyApO1xuXHRjb25zdCBjb250cm9sX2lkID0gd3JhcCA/IFN0cmluZyggd3JhcC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWZzLWNvbnRyb2xpZCcgKSB8fCAnJyApIDogJyc7XG5cdGNvbnN0IHJhZGlvcyA9IGNvbnRyb2xfaWRcblx0XHQ/IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCAnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInICsgY29udHJvbF9pZCArICdcIl0nIClcblx0XHQ6IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCAnaW5wdXRbdHlwZT1cInJhZGlvXCJdJyApO1xuXG5cdHJhZGlvcy5mb3JFYWNoKCBmdW5jdGlvbiAocmFkaW8pIHtcblx0XHRjb25zdCBzaG91bGRfY2hlY2sgPSAoIFN0cmluZyggcmFkaW8udmFsdWUgKSA9PT0gU3RyaW5nKCB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSApICk7XG5cdFx0cmFkaW8uY2hlY2tlZCA9IHNob3VsZF9jaGVjaztcblxuXHRcdGNvbnN0IGNob2ljZSA9IHJhZGlvLmNsb3Nlc3QgPyByYWRpby5jbG9zZXN0KCAnLndwYmNfdGhlbWVfY2hvaWNlJyApIDogbnVsbDtcblx0XHRpZiAoIGNob2ljZSApIHtcblx0XHRcdGNob2ljZS5jbGFzc0xpc3QudG9nZ2xlKCAnaXMtc2VsZWN0ZWQnLCBzaG91bGRfY2hlY2sgKTtcblx0XHR9XG5cdH0gKTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zZXRfc2VsZWN0X2NvbnRyb2woa2V5LCB2YWx1ZSkge1xuXHRjb25zdCBjb250cm9sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJ1tkYXRhLXdwYmMtYmZiLWZzLWtleT1cIicgKyBrZXkgKyAnXCJdJyApO1xuXHRpZiAoIGNvbnRyb2wgKSB7XG5cdFx0Y29udHJvbC52YWx1ZSA9IFN0cmluZyggdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUgKTtcblx0fVxufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9jdXJyZW50X29wdGlvbnMoKSB7XG5cdHJldHVybiB3aW5kb3cuV1BCQ19CRkJfRm9ybVNldHRpbmdzICYmIHR5cGVvZiB3aW5kb3cuV1BCQ19CRkJfRm9ybVNldHRpbmdzLmNvbGxlY3QgPT09ICdmdW5jdGlvbidcblx0XHQ/IHdpbmRvdy5XUEJDX0JGQl9Gb3JtU2V0dGluZ3MuY29sbGVjdCggJ2Zvcm0nICkgfHwge31cblx0XHQ6IHt9O1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9zdHlsZV92YWx1ZV9mcm9tX29wdGlvbnMob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgPyBvcHRpb25zIDoge307XG5cblx0Y29uc3QgdGhlbWUgPSBTdHJpbmcoIG9wdGlvbnMuYm9va2luZ19mb3JtX3RoZW1lIHx8ICcnICk7XG5cdGNvbnN0IHN0eWxlID0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgfHwgJ2luaGVyaXQnICk7XG5cblx0aWYgKCAnY3VzdG9tJyA9PT0gc3R5bGUgKSB7XG5cdFx0cmV0dXJuICdjdXN0b20nO1xuXHR9XG5cdGlmICggJ2luaGVyaXQnID09PSBzdHlsZSB8fCAnJyA9PT0gc3R5bGUgKSB7XG5cdFx0cmV0dXJuICdpbmhlcml0Jztcblx0fVxuXG5cdGNvbnN0IHByZWZpeCA9ICggJ3dwYmNfdGhlbWVfZGFya18xJyA9PT0gdGhlbWUgKSA/ICdkYXJrJyA6ICdsaWdodCc7XG5cdGlmICggWyAnYm9yZGVyZWQnLCAnbm9uZScsICdzb2Z0JyBdLmluZGV4T2YoIHN0eWxlICkgPT09IC0xICkge1xuXHRcdHJldHVybiBwcmVmaXggKyAnX2JvcmRlcmVkJztcblx0fVxuXG5cdHJldHVybiBwcmVmaXggKyAnXycgKyBzdHlsZTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2Zvcm1fc3R5bGVfY29udHJvbChvcHRpb25zKSB7XG5cdHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2V0X3JhZGlvX2NvbnRyb2woICdib29raW5nX2Zvcm1fc3R5bGUnLCB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9zdHlsZV92YWx1ZV9mcm9tX29wdGlvbnMoIG9wdGlvbnMgKSApO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmVfZm9ybV9zdHlsZV9jaG9pY2UodmFsdWUpIHtcblx0Y29uc3QgY3VycmVudF9vcHRpb25zID0gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfY3VycmVudF9vcHRpb25zKCk7XG5cdGNvbnN0IGN1cnJlbnRfdGhlbWUgPSBTdHJpbmcoIGN1cnJlbnRfb3B0aW9ucy5ib29raW5nX2Zvcm1fdGhlbWUgfHwgJycgKTtcblx0Y29uc3QgY2hvaWNlID0gU3RyaW5nKCB2YWx1ZSB8fCAnaW5oZXJpdCcgKTtcblxuXHRpZiAoICdjdXN0b20nID09PSBjaG9pY2UgKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGJvb2tpbmdfZm9ybV90aGVtZSAgICAgICAgICA6IGN1cnJlbnRfdGhlbWUsXG5cdFx0XHRib29raW5nX2Zvcm1fY29udGFpbmVyX3N0eWxlOiAnY3VzdG9tJ1xuXHRcdH07XG5cdH1cblx0aWYgKCAnaW5oZXJpdCcgPT09IGNob2ljZSB8fCAnJyA9PT0gY2hvaWNlICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRib29raW5nX2Zvcm1fdGhlbWUgICAgICAgICAgOiAnJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGU6ICdpbmhlcml0J1xuXHRcdH07XG5cdH1cblxuXHRjb25zdCBwYXJ0cyA9IGNob2ljZS5zcGxpdCggJ18nICk7XG5cdGNvbnN0IHRoZW1lID0gKCAnZGFyaycgPT09IHBhcnRzWzBdICkgPyAnd3BiY190aGVtZV9kYXJrXzEnIDogJyc7XG5cdGNvbnN0IHN0eWxlID0gcGFydHNbMV0gfHwgJ2JvcmRlcmVkJztcblxuXHRyZXR1cm4ge1xuXHRcdGJvb2tpbmdfZm9ybV90aGVtZSAgICAgICAgICA6IHRoZW1lLFxuXHRcdGJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGU6ICggWyAnYm9yZGVyZWQnLCAnbm9uZScsICdzb2Z0JyBdLmluZGV4T2YoIHN0eWxlICkgPT09IC0xICkgPyAnYm9yZGVyZWQnIDogc3R5bGVcblx0fTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc191c2VyX3RoZW1lX3N3aXRjaChjdHgpIHtcblx0Y29uc3Qgc291cmNlID0gU3RyaW5nKCBjdHggJiYgY3R4LnNvdXJjZSA/IGN0eC5zb3VyY2UgOiAnJyApO1xuXHRyZXR1cm4gWyAndWknLCAnY29sb3JpcycgXS5pbmRleE9mKCBzb3VyY2UgKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfY3VzdG9tX3N0eWxlKG9wdGlvbnMpIHtcblx0cmV0dXJuIFN0cmluZyggb3B0aW9ucyAmJiBvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgPyBvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgOiAnaW5oZXJpdCcgKSA9PT0gJ2N1c3RvbSc7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19jdXN0b21fY29udHJvbHMob3B0aW9ucykge1xuXHRjb25zdCBpc19jdXN0b20gPSB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2N1c3RvbV9zdHlsZSggb3B0aW9ucyApO1xuXHRjb25zdCByZXNldF9yb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtd3BiYy1iZmItY3VzdG9tLWFwcGVhcmFuY2UtcmVzZXQtcm93XScgKTtcblx0Y29uc3QgYmFzZV90aGVtZV9yb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19mb3JtX3NldHRpbmdbZGF0YS1rZXk9XCJib29raW5nX2Zvcm1fdGhlbWVcIl0nICk7XG5cblx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfY3VzdG9tX2NvbnRyb2xfa2V5cygpLmZvckVhY2goIGZ1bmN0aW9uIChrZXkpIHtcblx0XHRjb25zdCByb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19mb3JtX3NldHRpbmdbZGF0YS1rZXk9XCInICsga2V5ICsgJ1wiXScgKTtcblx0XHRpZiAoICEgcm93ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyb3cuaGlkZGVuID0gISBpc19jdXN0b207XG5cdFx0cm93LnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgaXNfY3VzdG9tID8gJ2ZhbHNlJyA6ICd0cnVlJyApO1xuXHRcdHJvdy5jbGFzc0xpc3QudG9nZ2xlKCAnaXMtaGlkZGVuJywgISBpc19jdXN0b20gKTtcblx0fSApO1xuXG5cdGlmICggcmVzZXRfcm93ICkge1xuXHRcdHJlc2V0X3Jvdy5oaWRkZW4gPSAhIGlzX2N1c3RvbTtcblx0XHRyZXNldF9yb3cuc2V0QXR0cmlidXRlKCAnYXJpYS1oaWRkZW4nLCBpc19jdXN0b20gPyAnZmFsc2UnIDogJ3RydWUnICk7XG5cdFx0cmVzZXRfcm93LmNsYXNzTGlzdC50b2dnbGUoICdpcy1oaWRkZW4nLCAhIGlzX2N1c3RvbSApO1xuXHR9XG5cblx0aWYgKCBiYXNlX3RoZW1lX3JvdyApIHtcblx0XHRiYXNlX3RoZW1lX3Jvdy5oaWRkZW4gPSAhIGlzX2N1c3RvbTtcblx0XHRiYXNlX3RoZW1lX3Jvdy5zZXRBdHRyaWJ1dGUoICdhcmlhLWhpZGRlbicsIGlzX2N1c3RvbSA/ICdmYWxzZScgOiAndHJ1ZScgKTtcblx0XHRiYXNlX3RoZW1lX3Jvdy5jbGFzc0xpc3QudG9nZ2xlKCAnaXMtaGlkZGVuJywgISBpc19jdXN0b20gKTtcblx0fVxufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmUob3B0aW9ucykge1xuXHRsZXQgc3R5bGUgICAgID0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgfHwgJ2luaGVyaXQnICk7XG5cblx0aWYgKCBzdHlsZSA9PT0gJ2luaGVyaXQnICkge1xuXHRcdGNvbnN0IGdsb2JhbF9vcHRpb25zID0gd2luZG93LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMgJiYgd2luZG93LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMuZ2xvYmFsX2FwcGVhcmFuY2Vcblx0XHRcdD8gd2luZG93LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMuZ2xvYmFsX2FwcGVhcmFuY2Vcblx0XHRcdDoge307XG5cdFx0b3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oIHt9LCBnbG9iYWxfb3B0aW9ucyB8fCB7fSApO1xuXHRcdHN0eWxlID0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgfHwgJ2JvcmRlcmVkJyApO1xuXHR9XG5cblx0aWYgKCBzdHlsZSA9PT0gJ2JvcmRlcmVkJyApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGlmICggc3R5bGUgIT09ICdjdXN0b20nICkge1xuXHRcdHJldHVybiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9wcmVzZXRfZm9yX29wdGlvbnMoIHN0eWxlLCBvcHRpb25zICk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGJhY2tncm91bmQgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9iYWNrZ3JvdW5kX2NvbG9yLCAnI2ZmZmZmZicgKSxcblx0XHRib3JkZXJDb2xvcjogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fYm9yZGVyX2NvbG9yLCAnI2NjY2NjYycgKSxcblx0XHRib3JkZXJXaWR0aDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9sZW5ndGgoIG9wdGlvbnMuYm9va2luZ19mb3JtX2JvcmRlcl93aWR0aCwgJzFweCcgKSxcblx0XHRyYWRpdXMgICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9sZW5ndGgoIG9wdGlvbnMuYm9va2luZ19mb3JtX2JvcmRlcl9yYWRpdXMsICcycHgnICksXG5cdFx0cGFkZGluZyAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfc3BhY2luZyggb3B0aW9ucy5ib29raW5nX2Zvcm1fcGFkZGluZywgJzEwcHggMzBweCcgKSxcblx0XHRzaGFkb3cgICAgIDogJ3JnYmEoMCwgMCwgMCwgMC4wNSkgMHB4IDJweCA2cHggMHB4J1xuXHR9O1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmVfZGVzaWduX2NvbG9ycyhvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyA/IG9wdGlvbnMgOiB7fTtcblxuXHRpZiAoICEgd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc19jdXN0b21fc3R5bGUoIG9wdGlvbnMgKSApIHtcblx0XHRpZiAoXG5cdFx0XHR3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2RhcmtfdGhlbWUoIG9wdGlvbnMgKSAmJlxuXHRcdFx0J25vbmUnID09PSBTdHJpbmcoIG9wdGlvbnMuYm9va2luZ19mb3JtX2NvbnRhaW5lcl9zdHlsZSB8fCAnJyApXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0ZXh0Q29sb3IgICAgICA6ICcjMWQyMzI3Jyxcblx0XHRcdFx0ZmllbGRCYWNrZ3JvdW5kOiAnJyxcblx0XHRcdFx0ZmllbGRUZXh0ICAgICAgOiAnJyxcblx0XHRcdFx0ZmllbGRCb3JkZXIgICAgOiAnJ1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRleHRDb2xvciAgICAgIDogJycsXG5cdFx0XHRmaWVsZEJhY2tncm91bmQ6ICcnLFxuXHRcdFx0ZmllbGRUZXh0ICAgICAgOiAnJyxcblx0XHRcdGZpZWxkQm9yZGVyICAgIDogJydcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR0ZXh0Q29sb3IgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfb3B0aW9uYWxfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX3RleHRfY29sb3IgKSxcblx0XHRmaWVsZEJhY2tncm91bmQ6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfb3B0aW9uYWxfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2ZpZWxkX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHRmaWVsZFRleHQgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfb3B0aW9uYWxfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2ZpZWxkX3RleHRfY29sb3IgKSxcblx0XHRmaWVsZEJvcmRlciAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfb3B0aW9uYWxfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2ZpZWxkX2JvcmRlcl9jb2xvciApXG5cdH07XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fYXBwbHlfdmFycyh2YWx1ZSwgY3R4KSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2NvbGxlY3Rfb3B0aW9ucyggY3R4LCBjdHggJiYgY3R4LmtleSwgdmFsdWUgKTtcblx0Y29uc3QgcmVzb2x2ZWQgPSB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmUoIG9wdGlvbnMgKTtcblx0Y29uc3QgZGVzaWduID0gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19yZXNvbHZlX2Rlc2lnbl9jb2xvcnMoIG9wdGlvbnMgKTtcblx0Y29uc3QgaXNfY3VzdG9tID0gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc19jdXN0b21fc3R5bGUoIG9wdGlvbnMgKTtcblx0Y29uc3Qgcm9vdCA9IGN0eCAmJiBjdHguY2FudmFzO1xuXG5cdHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19mb3JtX3N0eWxlX2NvbnRyb2woIG9wdGlvbnMgKTtcblx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2N1c3RvbV9jb250cm9scyggb3B0aW9ucyApO1xuXG5cdGlmICggISByb290IHx8ICEgcm9vdC5xdWVyeVNlbGVjdG9yQWxsICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHdyYXBzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXIsIC53cGJjX2JmYl9mb3JtJyApO1xuXHRpZiAoICEgd3JhcHMubGVuZ3RoICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHdyYXBzLmZvckVhY2goIGZ1bmN0aW9uICh3cmFwKSB7XG5cdFx0aWYgKCAhIHdyYXAgfHwgISB3cmFwLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR3cmFwLmNsYXNzTGlzdC50b2dnbGUoICd3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfY3VzdG9tJywgaXNfY3VzdG9tICk7XG5cdFx0aWYgKCAhIHJlc29sdmVkICkge1xuXHRcdFx0d3JhcC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1iYWNrZ3JvdW5kJyApO1xuXHRcdFx0d3JhcC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1ib3JkZXItY29sb3InICk7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjLWJmYi1mb3JtLWJvcmRlci13aWR0aCcgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLWZvcm0tYm9yZGVyLXJhZGl1cycgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLWZvcm0tcGFkZGluZycgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLWZvcm0tYm94LXNoYWRvdycgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1iYWNrZ3JvdW5kJywgcmVzb2x2ZWQuYmFja2dyb3VuZCApO1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1ib3JkZXItY29sb3InLCByZXNvbHZlZC5ib3JkZXJDb2xvciApO1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1ib3JkZXItd2lkdGgnLCByZXNvbHZlZC5ib3JkZXJXaWR0aCApO1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1ib3JkZXItcmFkaXVzJywgcmVzb2x2ZWQucmFkaXVzICk7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjLWJmYi1mb3JtLXBhZGRpbmcnLCByZXNvbHZlZC5wYWRkaW5nICk7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjLWJmYi1mb3JtLWJveC1zaGFkb3cnLCByZXNvbHZlZC5zaGFkb3cgKTtcblx0XHR9XG5cblx0XHRpZiAoIGRlc2lnbi50ZXh0Q29sb3IgKSB7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjX2Zvcm0tbGFiZWwtY29sb3InLCBkZXNpZ24udGV4dENvbG9yICk7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjX2Zvcm0tbGFiZWwtc3VibGFiZWwtY29sb3InLCBkZXNpZ24udGV4dENvbG9yICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmNfZm9ybS1sYWJlbC1jb2xvcicgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmNfZm9ybS1sYWJlbC1zdWJsYWJlbC1jb2xvcicgKTtcblx0XHR9XG5cblx0XHRpZiAoIGRlc2lnbi5maWVsZEJhY2tncm91bmQgKSB7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjX2Zvcm0tZmllbGQtYmFja2dyb3VuZC1jb2xvcicsIGRlc2lnbi5maWVsZEJhY2tncm91bmQgKTtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC1tZW51LWNvbG9yJywgZGVzaWduLmZpZWxkQmFja2dyb3VuZCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjX2Zvcm0tZmllbGQtYmFja2dyb3VuZC1jb2xvcicgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC1tZW51LWNvbG9yJyApO1xuXHRcdH1cblxuXHRcdGlmICggZGVzaWduLmZpZWxkVGV4dCApIHtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC10ZXh0LWNvbG9yJywgZGVzaWduLmZpZWxkVGV4dCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjX2Zvcm0tZmllbGQtdGV4dC1jb2xvcicgKTtcblx0XHR9XG5cblx0XHRpZiAoIGRlc2lnbi5maWVsZEJvcmRlciApIHtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC1ib3JkZXItY29sb3InLCBkZXNpZ24uZmllbGRCb3JkZXIgKTtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC1ib3JkZXItY29sb3Itc3BhcmUnLCBkZXNpZ24uZmllbGRCb3JkZXIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d3JhcC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSggJy0td3BiY19mb3JtLWZpZWxkLWJvcmRlci1jb2xvcicgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC1ib3JkZXItY29sb3Itc3BhcmUnICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfdmFycygpIHtcblx0cmV0dXJuIHdpbmRvdy53cGJjX2JmYl9zZXR0aW5nc192YXJzIHx8IHt9O1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ByZXNldHMoKSB7XG5cdGNvbnN0IHZhcnMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ZhcnMoKTtcblx0cmV0dXJuIHZhcnMuZm9ybV9zdHlsZV9wcmVzZXRzICYmIHR5cGVvZiB2YXJzLmZvcm1fc3R5bGVfcHJlc2V0cyA9PT0gJ29iamVjdCcgPyB2YXJzLmZvcm1fc3R5bGVfcHJlc2V0cyA6IHt9O1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X2N1c3RvbV9rZXlzKCkge1xuXHRyZXR1cm4gW1xuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3dpZHRoJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfcmFkaXVzJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX3ZlcnRpY2FsJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX2hvcml6b250YWwnLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JvcmRlcl9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JvcmRlcl9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3dpZHRoJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3JhZGl1cydcblx0XTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXN0b21fZGVmYXVsdHMoKSB7XG5cdGNvbnN0IHZhcnMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ZhcnMoKTtcblx0Y29uc3QgbG9jYWxpemVkID0gdmFycy5jdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyAmJiB0eXBlb2YgdmFycy5jdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyA9PT0gJ29iamVjdCdcblx0XHQ/IHZhcnMuY3VzdG9tX2Zvcm1fc3R5bGVfZGVmYXVsdHNcblx0XHQ6IHt9O1xuXG5cdHJldHVybiBPYmplY3QuYXNzaWduKCB7XG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9iYWNrZ3JvdW5kX2NvbG9yICAgICAgIDogJyNmZmZmZmYnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yICAgICAgICAgICA6ICcjY2NjY2NjJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl93aWR0aCAgICAgICAgICAgOiAnMXB4Jyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMgICAgICAgICAgOiAnMnB4Jyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwgICAgICAgOiAnMTBweCcsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX2hvcml6b250YWwgICAgIDogJzMwcHgnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciAgICAgICAgICAgICA6ICcjMWQyMzI3Jyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3IgOiAnI2ZmZmZmZicsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9maWVsZF90ZXh0X2NvbG9yICAgICAgIDogJyMzYzQzNGEnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yICAgICA6ICcjY2NjY2NjJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yOiAnIzA2NmFhYicsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fdGV4dF9jb2xvciAgICAgIDogJyNmZmZmZmYnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9jb2xvciAgICA6ICcjMDY2YWFiJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yOiAnIzA1NTU4OScsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvcjogJyNmZmZmZmYnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvcjogJyMwNTU1ODknLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yOiAnI2ZkZmRmZCcsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3I6ICcjNDQ0NDQ0Jyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yOiAnI2VlZWVlZScsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3I6ICcjZmRmZGZkJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvcjogJyM0NDQ0NDQnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3I6ICcjNGQ5MWNkJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfd2lkdGggICAgICA6ICcxcHgnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9yYWRpdXMgICAgIDogJzNweCdcblx0fSwgbG9jYWxpemVkICk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfY3VycmVudF9vcHRpb25zKGN0eCwga2V5LCB2YWx1ZSkge1xuXHRjb25zdCB2YXJzID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF92YXJzKCk7XG5cdGxldCBvcHRpb25zID0gdmFycy5nbG9iYWxfZm9ybV9zdHlsZSAmJiB0eXBlb2YgdmFycy5nbG9iYWxfZm9ybV9zdHlsZSA9PT0gJ29iamVjdCdcblx0XHQ/IE9iamVjdC5hc3NpZ24oIHt9LCB2YXJzLmdsb2JhbF9mb3JtX3N0eWxlIClcblx0XHQ6IHt9O1xuXG5cdGlmICggd2luZG93LldQQkNfQkZCX0Zvcm1TZXR0aW5ncyAmJiB0eXBlb2Ygd2luZG93LldQQkNfQkZCX0Zvcm1TZXR0aW5ncy5jb2xsZWN0ID09PSAnZnVuY3Rpb24nICkge1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKCBvcHRpb25zLCB3aW5kb3cuV1BCQ19CRkJfRm9ybVNldHRpbmdzLmNvbGxlY3QoICdnbG9iYWwnICkgfHwge30gKTtcblx0fVxuXG5cdGlmICggY3R4ICYmIGN0eC5vcHRpb25zICYmIHR5cGVvZiBjdHgub3B0aW9ucyA9PT0gJ29iamVjdCcgKSB7XG5cdFx0b3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oIG9wdGlvbnMsIGN0eC5vcHRpb25zICk7XG5cdH1cblx0aWYgKCBrZXkgKSB7XG5cdFx0b3B0aW9uc1tTdHJpbmcoIGtleSApXSA9IHZhbHVlO1xuXHR9XG5cdGlmICggISBvcHRpb25zLmJvb2tpbmdfZm9ybV9zdHlsZSApIHtcblx0XHRvcHRpb25zLmJvb2tpbmdfZm9ybV9zdHlsZSA9ICdsaWdodF9ib3JkZXJlZCc7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX21peF9jb2xvcnMoY29sb3IsIHRhcmdldCwgYW1vdW50KSB7XG5cdGxldCBzb3VyY2UgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fc2FuaXRpemVfYWNjZW50X2NvbG9yKCBjb2xvciApLnJlcGxhY2UoICcjJywgJycgKTtcblx0Y29uc3QgZGVzdGluYXRpb24gPSB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCB0YXJnZXQsICcjMDAwMDAwJyApLnJlcGxhY2UoICcjJywgJycgKTtcblx0Y29uc3QgY2hhbm5lbHMgPSBbXTtcblx0aWYgKCAhIHNvdXJjZSApIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0aWYgKCBzb3VyY2UubGVuZ3RoID09PSAzICkge1xuXHRcdHNvdXJjZSA9IHNvdXJjZS5yZXBsYWNlKCAvLi9nLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHZhbHVlICsgdmFsdWU7IH0gKTtcblx0fVxuXHRmb3IgKCBsZXQgaW5kZXggPSAwOyBpbmRleCA8IDM7IGluZGV4KysgKSB7XG5cdFx0Y29uc3Qgc291cmNlX2NoYW5uZWwgPSBwYXJzZUludCggc291cmNlLnN1YnN0ciggaW5kZXggKiAyLCAyICksIDE2ICk7XG5cdFx0Y29uc3QgdGFyZ2V0X2NoYW5uZWwgPSBwYXJzZUludCggZGVzdGluYXRpb24uc3Vic3RyKCBpbmRleCAqIDIsIDIgKSwgMTYgKTtcblx0XHRjaGFubmVscy5wdXNoKCBNYXRoLnJvdW5kKCBzb3VyY2VfY2hhbm5lbCArICggKCB0YXJnZXRfY2hhbm5lbCAtIHNvdXJjZV9jaGFubmVsICkgKiBhbW91bnQgKSApICk7XG5cdH1cblx0cmV0dXJuICcjJyArIGNoYW5uZWxzLm1hcCggZnVuY3Rpb24gKGNoYW5uZWwpIHsgcmV0dXJuICggJzAnICsgY2hhbm5lbC50b1N0cmluZyggMTYgKSApLnNsaWNlKCAtMiApOyB9ICkuam9pbiggJycgKTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9sdW1pbmFuY2UoY29sb3IpIHtcblx0bGV0IGhleCA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19zYW5pdGl6ZV9hY2NlbnRfY29sb3IoIGNvbG9yICkucmVwbGFjZSggJyMnLCAnJyApO1xuXHRpZiAoICEgaGV4ICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cdGlmICggaGV4Lmxlbmd0aCA9PT0gMyApIHtcblx0XHRoZXggPSBoZXgucmVwbGFjZSggLy4vZywgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB2YWx1ZSArIHZhbHVlOyB9ICk7XG5cdH1cblx0Y29uc3QgY2hhbm5lbHMgPSBbIDAsIDEsIDIgXS5tYXAoIGZ1bmN0aW9uIChpbmRleCkge1xuXHRcdGNvbnN0IGNoYW5uZWwgPSBwYXJzZUludCggaGV4LnN1YnN0ciggaW5kZXggKiAyLCAyICksIDE2ICkgLyAyNTU7XG5cdFx0cmV0dXJuIGNoYW5uZWwgPD0gMC4wMzkyOCA/IGNoYW5uZWwgLyAxMi45MiA6IE1hdGgucG93KCAoIGNoYW5uZWwgKyAwLjA1NSApIC8gMS4wNTUsIDIuNCApO1xuXHR9ICk7XG5cdHJldHVybiAoIDAuMjEyNiAqIGNoYW5uZWxzWzBdICkgKyAoIDAuNzE1MiAqIGNoYW5uZWxzWzFdICkgKyAoIDAuMDcyMiAqIGNoYW5uZWxzWzJdICk7XG59XG5cbi8qKlxuICogQXBwbHkgc2hhcmVkIGFjY2VudCB2YXJpYWJsZXMgd2l0aG91dCBtYXNraW5nIGV4cGxpY2l0IEN1c3RvbSBidXR0b24gY29udHJvbHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9ICBjc3NfdmFycyAgICAgICAgICAgICAgICAgICAgICBSZXNvbHZlZCBiYXNlIHN0eWxlIHZhcmlhYmxlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudCBnbG9iYWwgc3R5bGUgb3B0aW9ucy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJlc2VydmVfY3VzdG9tX2J1dHRvbl9jb2xvcnMgV2hldGhlciBDdXN0b20gYnV0dG9uIHZhcmlhYmxlcyByZW1haW4gYXV0aG9yaXRhdGl2ZS5cbiAqIEByZXR1cm4ge09iamVjdH0gUmVzb2x2ZWQgdmFyaWFibGVzIHdpdGggdGhlIG9wdGlvbmFsIGFjY2VudCBvdmVybGF5LlxuICovXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fYXBwbHlfYWNjZW50KGNzc192YXJzLCBvcHRpb25zLCBwcmVzZXJ2ZV9jdXN0b21fYnV0dG9uX2NvbG9ycykge1xuXHRpZiAoIFN0cmluZyggb3B0aW9ucy5ib29raW5nX2Zvcm1fYWNjZW50X2VuYWJsZWQgfHwgJ09mZicgKSAhPT0gJ09uJyApIHtcblx0XHRyZXR1cm4gY3NzX3ZhcnM7XG5cdH1cblx0Y29uc3QgYWNjZW50ID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX3Nhbml0aXplX2FjY2VudF9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fYWNjZW50X2NvbG9yICk7XG5cdGlmICggISBhY2NlbnQgKSB7XG5cdFx0cmV0dXJuIGNzc192YXJzO1xuXHR9XG5cdGNvbnN0IGx1bWluYW5jZSA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfbHVtaW5hbmNlKCBhY2NlbnQgKTtcblx0Y29uc3QgY29udHJhc3QgPSBsdW1pbmFuY2UgPiAwLjE4ID8gJyMwMDAwMDAnIDogJyNmZmZmZmYnO1xuXHRjb25zdCBob3Zlcl90YXJnZXQgPSAnI2ZmZmZmZicgPT09IGNvbnRyYXN0ID8gJyMwMDAwMDAnIDogJyNmZmZmZmYnO1xuXHRjb25zdCBob3ZlciA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19taXhfY29sb3JzKCBhY2NlbnQsIGhvdmVyX3RhcmdldCwgMC4xMCApO1xuXHRjb25zdCBob3Zlcl9jb250cmFzdCA9IGNvbnRyYXN0O1xuXG5cdGNvbnN0IGFjY2VudF9vdmVybGF5ID0ge1xuXHRcdCctLXdwYmNfZm9ybS1hY2NlbnQtY29sb3InOiBhY2NlbnQsXG5cdFx0Jy0td3BiY19mb3JtLWFjY2VudC1ob3Zlci1jb2xvcic6IGhvdmVyLFxuXHRcdCctLXdwYmNfZm9ybS1hY2NlbnQtY29udHJhc3QtY29sb3InOiBjb250cmFzdCxcblx0XHQnLS13cGJjX2Zvcm0tZmllbGQtZm9jdXMtYm9yZGVyLWNvbG9yJzogYWNjZW50LFxuXHRcdCctLXdwYmNfZm9ybS1maWVsZC1mb2N1cy1zaGFkb3ctY29sb3InOiBhY2NlbnQsXG5cdFx0Jy0td3BiY19mb3JtLWNob2ljZS1jaGVja2VkLWJvcmRlci1jb2xvcic6IGFjY2VudCxcblx0XHQnLS13cGJjX2Zvcm0tY2hvaWNlLWNoZWNrZWQtY29sb3InOiBhY2NlbnQsXG5cdFx0Jy0td3BiY19mb3JtLWNob2ljZS1mb2N1cy1jb2xvcic6IGFjY2VudCxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJhY2tncm91bmQtY29sb3InOiBhY2NlbnQsXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWFsdCc6IGFjY2VudCxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJvcmRlci1jb2xvcic6IGFjY2VudCxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXRleHQtY29sb3InOiBjb250cmFzdCxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXRleHQtY29sb3ItYWx0JzogY29udHJhc3QsXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yJzogaG92ZXIsXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ob3Zlci1ib3JkZXItY29sb3InOiBob3Zlcixcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWhvdmVyLXRleHQtY29sb3InOiBob3Zlcl9jb250cmFzdCxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWxpZ2h0LWhvdmVyLWJvcmRlci1jb2xvcic6IGFjY2VudCxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXByaW1hcnktaG92ZXItYm9yZGVyLWNvbG9yJzogaG92ZXIsXG5cdFx0Jy0td3BiY19mb3JtLXBhZ2UtYnJlYWstY29sb3InOiBhY2NlbnRcblx0fTtcblxuXHRpZiAoIHByZXNlcnZlX2N1c3RvbV9idXR0b25fY29sb3JzICkge1xuXHRcdFtcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tYmFja2dyb3VuZC1jb2xvcicsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJhY2tncm91bmQtY29sb3ItYWx0Jyxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tYm9yZGVyLWNvbG9yJyxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tdGV4dC1jb2xvcicsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXRleHQtY29sb3ItYWx0Jyxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24taG92ZXItYmFja2dyb3VuZC1jb2xvcicsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWhvdmVyLWJvcmRlci1jb2xvcicsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWhvdmVyLXRleHQtY29sb3InLFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ob3Zlci1ib3JkZXItY29sb3InLFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1wcmltYXJ5LWhvdmVyLWJvcmRlci1jb2xvcidcblx0XHRdLmZvckVhY2goIGZ1bmN0aW9uIChjc3NfdmFyX25hbWUpIHtcblx0XHRcdGRlbGV0ZSBhY2NlbnRfb3ZlcmxheVtjc3NfdmFyX25hbWVdO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QuYXNzaWduKCB7fSwgY3NzX3ZhcnMsIGFjY2VudF9vdmVybGF5ICk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19yZXNvbHZlX2Nzc192YXJzKG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnID8gb3B0aW9ucyA6IHt9O1xuXHRjb25zdCBzdHlsZSA9IFN0cmluZyggb3B0aW9ucy5ib29raW5nX2Zvcm1fc3R5bGUgfHwgJ2xpZ2h0X2JvcmRlcmVkJyApO1xuXHRjb25zdCBwcmVzZXRzID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9wcmVzZXRzKCk7XG5cdGNvbnN0IHByZXNldCA9IHByZXNldHNbc3R5bGVdIHx8IHByZXNldHMubGlnaHRfYm9yZGVyZWQgfHwge307XG5cdGNvbnN0IGRlZmF1bHRzID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXN0b21fZGVmYXVsdHMoKTtcblxuXHRpZiAoICdjdXN0b20nICE9PSBzdHlsZSApIHtcblx0XHRyZXR1cm4gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2FwcGx5X2FjY2VudCggcHJlc2V0LmNzc192YXJzICYmIHR5cGVvZiBwcmVzZXQuY3NzX3ZhcnMgPT09ICdvYmplY3QnID8gT2JqZWN0LmFzc2lnbigge30sIHByZXNldC5jc3NfdmFycyApIDoge30sIG9wdGlvbnMgKTtcblx0fVxuXG5cdGNvbnN0IGNzc192YXJzID0ge1xuXHRcdCctLXdwYmMtYmZiLWZvcm0tYmFja2dyb3VuZCcgICAgICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYmFja2dyb3VuZF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9iYWNrZ3JvdW5kX2NvbG9yICksXG5cdFx0Jy0td3BiYy1iZmItZm9ybS1ib3JkZXItY29sb3InICAgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yICksXG5cdFx0Jy0td3BiYy1iZmItZm9ybS1ib3JkZXItd2lkdGgnICAgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfbGVuZ3RoKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3dpZHRoLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl93aWR0aCApLFxuXHRcdCctLXdwYmMtYmZiLWZvcm0tYm9yZGVyLXJhZGl1cycgICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2xlbmd0aCggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3JhZGl1cyApLFxuXHRcdCctLXdwYmMtYmZiLWZvcm0tcGFkZGluZycgICAgICAgICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2xlbmd0aCggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ192ZXJ0aWNhbCApICsgJyAnICsgd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9sZW5ndGgoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX2hvcml6b250YWwsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ19ob3Jpem9udGFsICksXG5cdFx0Jy0td3BiYy1iZmItZm9ybS1ib3gtc2hhZG93JyAgICAgICAgICA6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpIDBweCAycHggNnB4IDBweCcsXG5cdFx0Jy0td3BiY19mb3JtLWxhYmVsLWNvbG9yJyAgICAgICAgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tbGFiZWwtc3VibGFiZWwtY29sb3InICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1sYWJlbC1lcnJvci1jb2xvcicgICAgICAgOiAnI2Q2MzYzNycsXG5cdFx0Jy0td3BiY19mb3JtLWZpZWxkLWJhY2tncm91bmQtY29sb3InICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tZmllbGQtbWVudS1jb2xvcicgICAgICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYmFja2dyb3VuZF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1maWVsZC10ZXh0LWNvbG9yJyAgICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF90ZXh0X2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWZpZWxkLWJvcmRlci1jb2xvcicgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWZpZWxkLWJvcmRlci1jb2xvci1zcGFyZSc6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWZpZWxkLWZvY3VzLWJvcmRlci1jb2xvcic6ICcjMDY2YWFiJyxcblx0XHQnLS13cGJjX2Zvcm0tZmllbGQtZm9jdXMtc2hhZG93LWNvbG9yJzogJyMwNjZhYWInLFxuXHRcdCctLXdwYmNfZm9ybS1maWVsZC1kaXNhYmxlZC1jb2xvcicgICAgOiAncmdiYSgwLCAwLCAwLCAwLjIpJyxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJvcmRlci1yYWRpdXMnICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9sZW5ndGgoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3JhZGl1cywgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3JhZGl1cyApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tYm9yZGVyLXN0eWxlJyAgICAgOiAnc29saWQnLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tYm9yZGVyLXNpemUnICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2xlbmd0aCggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfd2lkdGgsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl93aWR0aCApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tYmFja2dyb3VuZC1jb2xvcicgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJhY2tncm91bmQtY29sb3ItYWx0Jzogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ib3JkZXItY29sb3InICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXRleHQtY29sb3InICAgICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi10ZXh0LWNvbG9yLWFsdCcgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fdGV4dF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fdGV4dF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24taG92ZXItYmFja2dyb3VuZC1jb2xvcic6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24taG92ZXItYm9yZGVyLWNvbG9yJzogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24taG92ZXItdGV4dC1jb2xvcicgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX3RleHRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX3RleHRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tY2hvaWNlLWNoZWNrZWQtYm9yZGVyLWNvbG9yJzogJyMwNjZhYWInLFxuXHRcdCctLXdwYmNfZm9ybS1jaG9pY2UtY2hlY2tlZC1jb2xvcicgICAgOiAnIzA2NmFhYicsXG5cdFx0Jy0td3BiY19mb3JtLWNob2ljZS1mb2N1cy1jb2xvcicgICAgICA6ICcjMDY2YWFiJyxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWxpZ2h0LWJhY2tncm91bmQtY29sb3InOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYmFja2dyb3VuZF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tbGlnaHQtYm9yZGVyLWNvbG9yJzogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ib3JkZXItc2l6ZSc6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfbGVuZ3RoKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl93aWR0aCwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3dpZHRoICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC10ZXh0LWNvbG9yJyA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl90ZXh0X2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ib3gtc2hhZG93JyA6ICcwIDJweCAxMHB4IDJweCAjZmZmZmZmNTQnLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tbGlnaHQtaG92ZXItYmFja2dyb3VuZC1jb2xvcic6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ob3Zlci1ib3JkZXItY29sb3InOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWxpZ2h0LWhvdmVyLXRleHQtY29sb3InOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tbGlnaHQtaG92ZXItYm94LXNoYWRvdyc6ICcwIDJweCAxMHB4IDJweCAjZmZmZmZmNTQnLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tcHJpbWFyeS1ob3Zlci1ib3JkZXItY29sb3InOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLXBhZ2UtYnJlYWstY29sb3InICAgICAgICA6ICcjMDY2YWFiJ1xuXHR9O1xuXG5cdHJldHVybiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fYXBwbHlfYWNjZW50KCBjc3NfdmFycywgb3B0aW9ucywgdHJ1ZSApO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X2Nzc192YXJfa2V5cyhvcHRpb25zKSB7XG5cdGNvbnN0IHZhcnMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ZhcnMoKTtcblx0Y29uc3QgbG9jYWxpemVkID0gQXJyYXkuaXNBcnJheSggdmFycy5mb3JtX3N0eWxlX2Nzc192YXJfbmFtZXMgKSA/IHZhcnMuZm9ybV9zdHlsZV9jc3NfdmFyX25hbWVzIDogW107XG5cdGNvbnN0IGtleXMgPSBbXTtcblx0Y29uc3QgcHJlc2V0cyA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfcHJlc2V0cygpO1xuXG5cdGlmICggbG9jYWxpemVkLmxlbmd0aCApIHtcblx0XHRyZXR1cm4gbG9jYWxpemVkO1xuXHR9XG5cblx0T2JqZWN0LmtleXMoIHByZXNldHMgKS5mb3JFYWNoKCBmdW5jdGlvbiAocHJlc2V0X2tleSkge1xuXHRcdGNvbnN0IHByZXNldCA9IHByZXNldHNbcHJlc2V0X2tleV0gfHwge307XG5cdFx0Y29uc3QgY3NzX3ZhcnMgPSBwcmVzZXQuY3NzX3ZhcnMgJiYgdHlwZW9mIHByZXNldC5jc3NfdmFycyA9PT0gJ29iamVjdCcgPyBwcmVzZXQuY3NzX3ZhcnMgOiB7fTtcblxuXHRcdE9iamVjdC5rZXlzKCBjc3NfdmFycyApLmZvckVhY2goIGZ1bmN0aW9uICh2YXJfbmFtZSkge1xuXHRcdFx0aWYgKCBrZXlzLmluZGV4T2YoIHZhcl9uYW1lICkgPT09IC0xICkge1xuXHRcdFx0XHRrZXlzLnB1c2goIHZhcl9uYW1lICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9ICk7XG5cblx0T2JqZWN0LmtleXMoIHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19yZXNvbHZlX2Nzc192YXJzKCBPYmplY3QuYXNzaWduKCB7fSwgb3B0aW9ucyB8fCB7fSwgeyBib29raW5nX2Zvcm1fc3R5bGU6ICdjdXN0b20nIH0gKSApICkuZm9yRWFjaCggZnVuY3Rpb24gKHZhcl9uYW1lKSB7XG5cdFx0aWYgKCBrZXlzLmluZGV4T2YoIHZhcl9uYW1lICkgPT09IC0xICkge1xuXHRcdFx0a2V5cy5wdXNoKCB2YXJfbmFtZSApO1xuXHRcdH1cblx0fSApO1xuXG5cdHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fc3luY19jb250cm9scyhvcHRpb25zKSB7XG5cdGNvbnN0IGlzX2N1c3RvbSA9ICdjdXN0b20nID09PSBTdHJpbmcoIG9wdGlvbnMgJiYgb3B0aW9ucy5ib29raW5nX2Zvcm1fc3R5bGUgPyBvcHRpb25zLmJvb2tpbmdfZm9ybV9zdHlsZSA6ICcnICk7XG5cdGNvbnN0IGFjY2VudF9lbmFibGVkID0gJ09uJyA9PT0gU3RyaW5nKCBvcHRpb25zICYmIG9wdGlvbnMuYm9va2luZ19mb3JtX2FjY2VudF9lbmFibGVkID8gb3B0aW9ucy5ib29raW5nX2Zvcm1fYWNjZW50X2VuYWJsZWQgOiAnT2ZmJyApO1xuXHRjb25zdCByZXNldF9yb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtd3BiYy1iZmItY3VzdG9tLWFwcGVhcmFuY2UtcmVzZXQtcm93XScgKTtcblxuXHR3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9yYWRpb19jb250cm9sKCAnYm9va2luZ19mb3JtX3N0eWxlJywgb3B0aW9ucy5ib29raW5nX2Zvcm1fc3R5bGUgfHwgJ2xpZ2h0X2JvcmRlcmVkJyApO1xuXG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2Zvcm1fc2V0dGluZ19nbG9iYWxfY3VzdG9tX3N0eWxlJyApLmZvckVhY2goIGZ1bmN0aW9uIChyb3cpIHtcblx0XHRyb3cuaGlkZGVuID0gISBpc19jdXN0b207XG5cdFx0cm93LnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgaXNfY3VzdG9tID8gJ2ZhbHNlJyA6ICd0cnVlJyApO1xuXHRcdHJvdy5jbGFzc0xpc3QudG9nZ2xlKCAnaXMtaGlkZGVuJywgISBpc19jdXN0b20gKTtcblx0fSApO1xuXG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2Zvcm1fc2V0dGluZ19nbG9iYWxfYWNjZW50X2RlcGVuZGVudCcgKS5mb3JFYWNoKCBmdW5jdGlvbiAocm93KSB7XG5cdFx0cm93LmhpZGRlbiA9ICEgYWNjZW50X2VuYWJsZWQ7XG5cdFx0cm93LnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgYWNjZW50X2VuYWJsZWQgPyAnZmFsc2UnIDogJ3RydWUnICk7XG5cdFx0cm93LmNsYXNzTGlzdC50b2dnbGUoICdpcy1oaWRkZW4nLCAhIGFjY2VudF9lbmFibGVkICk7XG5cdH0gKTtcblxuXHRpZiAoIHJlc2V0X3JvdyApIHtcblx0XHRyZXNldF9yb3cuaGlkZGVuID0gISBpc19jdXN0b207XG5cdFx0cmVzZXRfcm93LnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgaXNfY3VzdG9tID8gJ2ZhbHNlJyA6ICd0cnVlJyApO1xuXHRcdHJlc2V0X3Jvdy5jbGFzc0xpc3QudG9nZ2xlKCAnaXMtaGlkZGVuJywgISBpc19jdXN0b20gKTtcblx0fVxufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fYXBwbHkodmFsdWUsIGN0eCkge1xuXHRjb25zdCBvcHRpb25zID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXJyZW50X29wdGlvbnMoIGN0eCwgY3R4ICYmIGN0eC5rZXksIHZhbHVlICk7XG5cdGNvbnN0IHN0eWxlID0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9zdHlsZSB8fCAnbGlnaHRfYm9yZGVyZWQnICk7XG5cdGNvbnN0IHByZXNldHMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ByZXNldHMoKTtcblx0Y29uc3QgcHJlc2V0ID0gcHJlc2V0c1tzdHlsZV0gfHwgcHJlc2V0cy5saWdodF9ib3JkZXJlZCB8fCB7fTtcblx0Y29uc3QgY3NzX3ZhcnMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fcmVzb2x2ZV9jc3NfdmFycyggb3B0aW9ucyApO1xuXHQvLyBGb3JtIFN0eWxlIGlzIGdsb2JhbC4gQWx3YXlzIHN0YXJ0IGF0IHRoZSBjb21wbGV0ZSBCdWlsZGVyIHRoZW1lIHNjb3BlIHNvXG5cdC8vIGlubGluZSBDdXN0b20gdG9rZW5zIG9uIGFuIG91dGVyIHdyYXBwZXIgY2Fubm90IGxlYWsgaW50byBhIHByZXNldCB3aGVuIGFcblx0Ly8gZmllbGQtbGV2ZWwgdXBkYXRlIHByb3ZpZGVzIG9ubHkgdGhlIGlubmVyIGNhbnZhcyBpbiBjdHguY2FudmFzLlxuXHRjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9fdGhlbWVfc2NvcGUnICkgfHwgKCBjdHggJiYgY3R4LmNhbnZhcyApIHx8IGRvY3VtZW50O1xuXHRjb25zdCB0aGVtZV9jbGFzc2VzID0gW107XG5cdGNvbnN0IGNzc192YXJfa2V5cyA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfY3NzX3Zhcl9rZXlzKCBvcHRpb25zICk7XG5cblx0d3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX3N5bmNfY29udHJvbHMoIG9wdGlvbnMgKTtcblxuXHRPYmplY3Qua2V5cyggcHJlc2V0cyApLmZvckVhY2goIGZ1bmN0aW9uIChwcmVzZXRfa2V5KSB7XG5cdFx0Y29uc3QgY2xhc3NfbmFtZSA9IHByZXNldHNbcHJlc2V0X2tleV0gJiYgcHJlc2V0c1twcmVzZXRfa2V5XS50aGVtZV9jbGFzcyA/IFN0cmluZyggcHJlc2V0c1twcmVzZXRfa2V5XS50aGVtZV9jbGFzcyApIDogJyc7XG5cdFx0aWYgKCBjbGFzc19uYW1lICYmIHRoZW1lX2NsYXNzZXMuaW5kZXhPZiggY2xhc3NfbmFtZSApID09PSAtMSApIHtcblx0XHRcdHRoZW1lX2NsYXNzZXMucHVzaCggY2xhc3NfbmFtZSApO1xuXHRcdH1cblx0fSApO1xuXG5cdGlmICggISByb290IHx8ICEgcm9vdC5xdWVyeVNlbGVjdG9yQWxsICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHNlbGVjdG9yID0gJy53cGJjX2NvbnRhaW5lci53cGJjX2Zvcm0sIC53cGJjX2JmYl9mb3JtLCAud3BiY19iZmJfX3BhZ2VzX3BhbmVsLCAud3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcic7XG5cdGNvbnN0IHdyYXBzID0gW107XG5cdGlmICggcm9vdC5tYXRjaGVzICYmIHJvb3QubWF0Y2hlcyggc2VsZWN0b3IgKSApIHtcblx0XHR3cmFwcy5wdXNoKCByb290ICk7XG5cdH1cblx0cm9vdC5xdWVyeVNlbGVjdG9yQWxsKCBzZWxlY3RvciApLmZvckVhY2goIGZ1bmN0aW9uICh3cmFwKSB7XG5cdFx0d3JhcHMucHVzaCggd3JhcCApO1xuXHR9ICk7XG5cblx0d3JhcHMuZm9yRWFjaCggZnVuY3Rpb24gKHdyYXApIHtcblx0XHRpZiAoICEgd3JhcCB8fCAhIHdyYXAuc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoZW1lX2NsYXNzZXMuZm9yRWFjaCggZnVuY3Rpb24gKGNsYXNzX25hbWUpIHtcblx0XHRcdHdyYXAuY2xhc3NMaXN0LnJlbW92ZSggY2xhc3NfbmFtZSApO1xuXHRcdH0gKTtcblx0XHRpZiAoIHByZXNldC50aGVtZV9jbGFzcyApIHtcblx0XHRcdHdyYXAuY2xhc3NMaXN0LmFkZCggU3RyaW5nKCBwcmVzZXQudGhlbWVfY2xhc3MgKSApO1xuXHRcdH1cblx0XHR3cmFwLmNsYXNzTGlzdC50b2dnbGUoICd3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfY3VzdG9tJywgJ2N1c3RvbScgPT09IHN0eWxlICk7XG5cblx0XHRjc3NfdmFyX2tleXMuZm9yRWFjaCggZnVuY3Rpb24gKGNzc19rZXkpIHtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoIGNzc19rZXkgKTtcblx0XHR9ICk7XG5cdFx0T2JqZWN0LmtleXMoIGNzc192YXJzICkuZm9yRWFjaCggZnVuY3Rpb24gKGNzc19rZXkpIHtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoIGNzc19rZXksIGNzc192YXJzW2Nzc19rZXldICk7XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbltcblx0J2Jvb2tpbmdfZm9ybV9zdHlsZScsXG5cdCdib29raW5nX2Zvcm1fYWNjZW50X2VuYWJsZWQnLFxuXHQnYm9va2luZ19mb3JtX2FjY2VudF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2JhY2tncm91bmRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfd2lkdGgnLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfcmFkaXVzJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ192ZXJ0aWNhbCcsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfaG9yaXpvbnRhbCcsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JvcmRlcl9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX3RleHRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX2NvbG9yJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JhY2tncm91bmRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JvcmRlcl9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl93aWR0aCcsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfcmFkaXVzJ1xuXS5mb3JFYWNoKCBmdW5jdGlvbiAoa2V5KSB7XG5cdFdQQkNfQkZCX1NldHRpbmdzX0VmZmVjdHMucmVnaXN0ZXIoIGtleSwgZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcblx0XHR3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fYXBwbHkoIHZhbHVlLCBPYmplY3QuYXNzaWduKCB7fSwgY3R4IHx8IHt9LCB7IGtleToga2V5IH0gKSApO1xuXHR9ICk7XG59ICk7XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19jdXN0b21fY29udHJvbHNfZnJvbV91aSgpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfY3VycmVudF9vcHRpb25zKCk7XG5cdHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19zeW5jX2NvbnRyb2xzKCBvcHRpb25zICk7XG5cdHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19hcHBseSggbnVsbCwgeyBzb3VyY2U6ICdzeW5jLWdsb2JhbC1zdHlsZScgfSApO1xufVxuXG53cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3N5bmNfY3VzdG9tX2NvbnRyb2xzX2Zyb21fdWkoKTtcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdET01Db250ZW50TG9hZGVkJywgd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2N1c3RvbV9jb250cm9sc19mcm9tX3VpICk7XG5cblxuLy8gQk9PS0lOR19GT1JNX1RIRU1FLlxuV1BCQ19CRkJfU2V0dGluZ3NfRWZmZWN0cy5yZWdpc3RlciggJ2Jvb2tpbmdfZm9ybV90aGVtZScsIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG5cdGNvbnN0IHJvb3QgPSAoY3R4ICYmIGN0eC5jYW52YXMpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX3RoZW1lX3Njb3BlJyApIHx8IGRvY3VtZW50O1xuXHRpZiAoICEgcm9vdCB8fCAhIHJvb3QucXVlcnlTZWxlY3RvckFsbCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfdXNlcl90aGVtZV9zd2l0Y2goIGN0eCApICkge1xuXHRcdGNvbnN0IGN1cnJlbnRfb3B0aW9ucyA9IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X2N1cnJlbnRfb3B0aW9ucygpO1xuXHRcdGlmICggJ2N1c3RvbScgPT09IFN0cmluZyggY3VycmVudF9vcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgfHwgJycgKSApIHtcblx0XHRcdGN1cnJlbnRfb3B0aW9ucy5ib29raW5nX2Zvcm1fdGhlbWUgPSB2YWx1ZTtcblx0XHRcdHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19mb3JtX3N0eWxlX2NvbnRyb2woIGN1cnJlbnRfb3B0aW9ucyApO1xuXHRcdFx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19hcHBseV92YXJzKCAnY3VzdG9tJywgT2JqZWN0LmFzc2lnbigge30sIGN0eCB8fCB7fSwge1xuXHRcdFx0XHRrZXkgICAgOiAnYm9va2luZ19mb3JtX2NvbnRhaW5lcl9zdHlsZScsXG5cdFx0XHRcdHNvdXJjZSA6ICd0aGVtZS1iYXNlLWN1c3RvbScsXG5cdFx0XHRcdG9wdGlvbnM6IGN1cnJlbnRfb3B0aW9uc1xuXHRcdFx0fSApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2V0X2NvbnRhaW5lcl9zdHlsZV9jb250cm9sKCAnYm9yZGVyZWQnICk7XG5cdFx0XHR3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2FwcGx5X3ZhcnMoICdib3JkZXJlZCcsIE9iamVjdC5hc3NpZ24oIHt9LCBjdHggfHwge30sIHsga2V5OiAnYm9va2luZ19mb3JtX2NvbnRhaW5lcl9zdHlsZScgfSApICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBjdHggJiYgY3R4Lm9wdGlvbnMgKSB7XG5cdFx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2Zvcm1fc3R5bGVfY29udHJvbCggY3R4Lm9wdGlvbnMgKTtcblx0fVxuXG5cdGNvbnN0IHRoZW1lX3NlbGVjdG9yID0gJy53cGJjX2NvbnRhaW5lci53cGJjX2Zvcm0sIC53cGJjX2JmYl9mb3JtLCAud3BiY19iZmJfX3BhZ2VzX3BhbmVsJztcblx0Y29uc3Qgd3JhcHMgPSBbXTtcblx0aWYgKCByb290Lm1hdGNoZXMgJiYgcm9vdC5tYXRjaGVzKCB0aGVtZV9zZWxlY3RvciApICkge1xuXHRcdHdyYXBzLnB1c2goIHJvb3QgKTtcblx0fVxuXHRyb290LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoZW1lX3NlbGVjdG9yICkuZm9yRWFjaCggZnVuY3Rpb24gKHdyYXApIHtcblx0XHR3cmFwcy5wdXNoKCB3cmFwICk7XG5cdH0gKTtcblx0aWYgKCAhIHdyYXBzLmxlbmd0aCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR3cmFwcy5mb3JFYWNoKCBmdW5jdGlvbiAod3JhcCkge1xuXHRcdC8vIHJlbW92ZSBhbnkgcHJldmlvdXMgdGhlbWUgY2xhc3NlcyAoc2ltcGxlICsgZnV0dXJlLXByb29mKS5cblx0XHRBcnJheS5mcm9tKCB3cmFwLmNsYXNzTGlzdCApLmZvckVhY2goIGZ1bmN0aW9uIChjbHMpIHtcblx0XHRcdGlmICggL153cGJjX3RoZW1lXy8udGVzdCggY2xzICkgKSB7XG5cdFx0XHRcdHdyYXAuY2xhc3NMaXN0LnJlbW92ZSggY2xzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0aWYgKCB2YWx1ZSApIHtcblx0XHRcdHdyYXAuY2xhc3NMaXN0LmFkZCggU3RyaW5nKCB2YWx1ZSApICk7XG5cdFx0fVxuXHR9ICk7XG59ICk7XG5cblxuLy8gQk9PS0lOR19GT1JNX0xBWU9VVF9XSURUSCDigJQgRm9ybSB3aWR0aDogYXBwbGllcyBjb21iaW5lZCBcIjEwMCVcIiAvIFwiNjAwcHhcIiAvIFwiNDByZW1cIiB0byB0aGUgYm9va2luZyBmb3JtIGNvbnRhaW5lcnMuXG5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzLnJlZ2lzdGVyKCAnYm9va2luZ19mb3JtX2xheW91dF93aWR0aCcsIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG5cdGNvbnN0IHJvb3QgPSBjdHggJiYgY3R4LmNhbnZhcztcblx0aWYgKCAhIHJvb3QgfHwgISByb290LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3Qgd3JhcHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcicgKTtcblx0aWYgKCAhIHdyYXBzLmxlbmd0aCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCB2ID0gU3RyaW5nKCB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSApLnRyaW0oKTtcblxuXHQvLyBhbGxvdyBvbmx5IFwibnVtYmVyICsgdW5pdFwiLlxuXHRpZiAoIHYgJiYgISAvXlxcZCsoPzpcXC5cXGQrKT8oPzolfHB4fHJlbXxlbXx2d3x2aCkkLy50ZXN0KCB2ICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0d3JhcHMuZm9yRWFjaChcblx0XHRmdW5jdGlvbiAod3JhcCkge1xuXHRcdFx0aWYgKCAhIHdyYXAgfHwgISB3cmFwLnN0eWxlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggISB2ICkge1xuXHRcdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjLWJmYi1ib29raW5nX2Zvcm1fbGF5b3V0X3dpZHRoJyApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItYm9va2luZ19mb3JtX2xheW91dF93aWR0aCcsIHYgKTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gRGVidWcgUHJldmlldyBNb2RlLlxuV1BCQ19CRkJfU2V0dGluZ3NfRWZmZWN0cy5yZWdpc3RlciggJ2Jvb2tpbmdfYmZiX3ByZXZpZXdfbW9kZScsIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG5cdGNvbnN0IHJvb3QgPSBjdHguY2FudmFzO1xuXHRpZiAoICEgcm9vdCB8fCAhIHJvb3QucXVlcnlTZWxlY3RvckFsbCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCB3cmFwcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2NvbnRhaW5lci53cGJjX2Zvcm0nICk7XG5cdGlmICggISB3cmFwcy5sZW5ndGggKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gR2V0IGJ1aWxkZXIgYXN5bmMuXG5cdHdwYmNfYmZiX2FwaS53aXRoX2J1aWxkZXIoXG5cdFx0ZnVuY3Rpb24gKEJ1aWxkZXIpIHtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBDYXB0dXJlIGFjdGl2ZSByaWdodCBzaWRlYmFyIHRhYiBhbmQgcmV0dXJuIHJlc3RvcmUgaGFuZGxlLlxuXHRcdFx0ICpcblx0XHRcdCAqIEByZXR1cm4ge3tyZXN0b3JlOmZ1bmN0aW9uKCk6dm9pZH18bnVsbH1cblx0XHRcdCAqL1xuXHRcdFx0ZnVuY3Rpb24gY2FwdHVyZV9yaWdodF9zaWRlYmFyX2FjdGl2ZV90YWJfcmVzdG9yZV9oYW5kbGUoKSB7XG5cblx0XHRcdFx0dmFyIHRhYmxpc3RfZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19yaWdodGJhcl90YWJzW3JvbGU9XCJ0YWJsaXN0XCJdJyApO1xuXHRcdFx0XHRpZiAoICEgdGFibGlzdF9lbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBhY3RpdmVfdGFiX2VsID0gdGFibGlzdF9lbC5xdWVyeVNlbGVjdG9yKCAnW3JvbGU9XCJ0YWJcIl1bYXJpYS1zZWxlY3RlZD1cInRydWVcIl0nICk7XG5cblx0XHRcdFx0aWYgKCAhIGFjdGl2ZV90YWJfZWwgKSB7XG5cdFx0XHRcdFx0YWN0aXZlX3RhYl9lbCA9IHRhYmxpc3RfZWwucXVlcnlTZWxlY3RvciggJ1tyb2xlPVwidGFiXCJdW2FyaWEtY29udHJvbHM9XCJ3cGJjX2JmYl9fcGFsZXR0ZV9hZGRfbmV3XCJdJyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCAhIGFjdGl2ZV90YWJfZWwgfHwgdHlwZW9mIGFjdGl2ZV90YWJfZWwuY2xpY2sgIT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHJlc3RvcmU6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHRyeSB7IGFjdGl2ZV90YWJfZWwuY2xpY2soKTsgfSBjYXRjaCAoIF9lICkge31cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHZhciB0YWJfcmVzdG9yZV9oYW5kbGUgPSBjYXB0dXJlX3JpZ2h0X3NpZGViYXJfYWN0aXZlX3RhYl9yZXN0b3JlX2hhbmRsZSgpO1xuXG5cdFx0XHRsZXQgcmVzdG9yZWQgID0gZmFsc2U7XG5cdFx0XHR2YXIgRVZTICAgICAgPSB3aW5kb3cuV1BCQ19CRkJfQ29yZSAmJiB3aW5kb3cuV1BCQ19CRkJfQ29yZS5XUEJDX0JGQl9FdmVudHMgPyB3aW5kb3cuV1BCQ19CRkJfQ29yZS5XUEJDX0JGQl9FdmVudHMgOiB7fTtcblx0XHRcdHZhciBFVl9ET05FICA9IEVWUy5TVFJVQ1RVUkVfTE9BREVEIHx8IEVWUy5DQU5WQVNfUkVGUkVTSEVEIHx8ICd3cGJjOmJmYjpzdHJ1Y3R1cmUtbG9hZGVkJztcblxuXG5cdFx0XHRmdW5jdGlvbiBkb19yZXN0b3JlKCkge1xuXHRcdFx0XHRpZiAoIHJlc3RvcmVkICkgeyByZXR1cm47IH1cblx0XHRcdFx0cmVzdG9yZWQgPSB0cnVlO1xuXHRcdFx0XHR0cnkgeyBCdWlsZGVyPy5idXM/Lm9mZj8uKCBFVl9ET05FLCBkb19yZXN0b3JlICk7IH0gY2F0Y2ggKCBfICkge31cblx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aWYgKCAhIHRhYl9yZXN0b3JlX2hhbmRsZSApIHsgcmV0dXJuOyB9XG5cdFx0XHRcdFx0dGFiX3Jlc3RvcmVfaGFuZGxlLnJlc3RvcmUoKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMaXN0ZW4gb25jZSAoYmVzdCksIHBsdXMgYSBmYWxsYmFjayBpbiBjYXNlIGV2ZW50IGlzbid0IGZpcmVkLlxuXHRcdFx0dHJ5IHsgQnVpbGRlcj8uYnVzPy5vbj8uKCBFVl9ET05FLCBkb19yZXN0b3JlICk7IH0gY2F0Y2ggKCBfICkge31cblxuXG5cdFx0XHR2YXIgZW5hYmxlZCA9ICgnT24nID09PSB2YWx1ZSk7XG5cdFx0XHRCdWlsZGVyLnNldF9wcmV2aWV3X21vZGUoIGVuYWJsZWQsIHsgcmVidWlsZDogdHJ1ZSwgcmVpbml0OiB0cnVlLCBzb3VyY2U6ICdzZXR0aW5ncy1lZmZlY3RzJyB9ICk7XG5cdFx0fVxuXHQpO1xuXG59ICk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsVUFBVUEsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDaEIsWUFBWTs7RUFFWixNQUFNQyxPQUFPLEdBQUlGLENBQUMsQ0FBQ0cseUJBQXlCLEdBQUdILENBQUMsQ0FBQ0cseUJBQXlCLElBQUksQ0FBQyxDQUFFO0VBQ2pGLE1BQU1DLEdBQUcsR0FBUUYsT0FBTyxDQUFDRSxHQUFHLEdBQUdGLE9BQU8sQ0FBQ0UsR0FBRyxJQUFJQyxNQUFNLENBQUNDLE1BQU0sQ0FBRSxJQUFLLENBQUU7RUFFcEVKLE9BQU8sQ0FBQ0ssUUFBUSxHQUFHLFVBQVVDLEdBQUcsRUFBRUMsRUFBRSxFQUFFO0lBQ3JDLElBQUtELEdBQUcsSUFBSSxPQUFPQyxFQUFFLEtBQUssVUFBVSxFQUFHO01BQ3RDTCxHQUFHLENBQUNNLE1BQU0sQ0FBRUYsR0FBSSxDQUFDLENBQUMsR0FBR0MsRUFBRTtJQUN4QjtFQUNELENBQUM7RUFFRCxTQUFTRSxlQUFlQSxDQUFBLEVBQUc7SUFDMUIsT0FDQ1YsQ0FBQyxDQUFDVyxhQUFhLENBQUUsNEJBQTZCLENBQUMsSUFDL0NYLENBQUMsQ0FBQ1csYUFBYSxDQUFFLDJCQUE0QixDQUFDLElBQzlDWCxDQUFDLENBQUNZLGNBQWMsQ0FBRSxtQkFBb0IsQ0FBQyxJQUN2Q1osQ0FBQyxDQUFDYSxJQUFJLElBQUliLENBQUMsQ0FBQ2MsZUFBZTtFQUU3QjtFQUVB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 | |